blob: b20d511f8b53a824a1f381b4bc754091a737aa52 [file] [log] [blame]
<!-- HTML header for doxygen 1.8.17-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Arm NN: PermutationVector Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 15rem; margin-top: .5rem; margin-left 13px"/>
<td id="projectalign" style="padding-left: 0.9em;">
<div id="projectname">
&#160;<span id="projectnumber">24.02</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classarmnn_1_1_permutation_vector.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classarmnn_1_1_permutation_vector-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">PermutationVector Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="_types_8hpp_source.html">Types.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a9e70f27e3e424e90566080423b1fe2db"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> = unsigned int</td></tr>
<tr class="separator:a9e70f27e3e424e90566080423b1fe2db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12b132c42f8e60ebc9669a3b333bb946"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> = unsigned int</td></tr>
<tr class="separator:a12b132c42f8e60ebc9669a3b333bb946"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acaddf65e487df26a73b4e90cbfc0ada9"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#acaddf65e487df26a73b4e90cbfc0ada9">ArrayType</a> = std::array&lt; <a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a>, <a class="el" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a> &gt;</td></tr>
<tr class="separator:acaddf65e487df26a73b4e90cbfc0ada9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a065e980f27e65a118d3b071ab077cfda"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a> = typename ArrayType::const_iterator</td></tr>
<tr class="separator:a065e980f27e65a118d3b071ab077cfda"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a399359e369b182e7c86840d7b6a38c41"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#a399359e369b182e7c86840d7b6a38c41">PermutationVector</a> (const <a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> *dimMappings, <a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> numDimMappings)</td></tr>
<tr class="separator:a399359e369b182e7c86840d7b6a38c41"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb9aad0dc5def92d5749a0efad1ead58"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#adb9aad0dc5def92d5749a0efad1ead58">PermutationVector</a> (std::initializer_list&lt; <a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> &gt; dimMappings)</td></tr>
<tr class="separator:adb9aad0dc5def92d5749a0efad1ead58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86e55f7d14b21da3b31280412be96bd7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#a86e55f7d14b21da3b31280412be96bd7">operator[]</a> (<a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i) const</td></tr>
<tr class="memdesc:a86e55f7d14b21da3b31280412be96bd7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Indexing method with out-of-bounds error checking for the m_DimMappings array. <a href="classarmnn_1_1_permutation_vector.html#a86e55f7d14b21da3b31280412be96bd7">More...</a><br /></td></tr>
<tr class="separator:a86e55f7d14b21da3b31280412be96bd7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a490ec6b59006d1fe1ec2ea30e69fb97c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a> () const</td></tr>
<tr class="separator:a490ec6b59006d1fe1ec2ea30e69fb97c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5fee900c7aee90671038c79225bf8ec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_permutation_vector.html#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#ad5fee900c7aee90671038c79225bf8ec">begin</a> () const</td></tr>
<tr class="separator:ad5fee900c7aee90671038c79225bf8ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a69b6e2a03c835ca5d658a1f16acbaa9c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classarmnn_1_1_permutation_vector.html#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#a69b6e2a03c835ca5d658a1f16acbaa9c">end</a> () const</td></tr>
<tr class="separator:a69b6e2a03c835ca5d658a1f16acbaa9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae44e4154aa80fba7616747450ff69d5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#aae44e4154aa80fba7616747450ff69d5">IsEqual</a> (const <a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> &amp;other) const</td></tr>
<tr class="separator:aae44e4154aa80fba7616747450ff69d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abca528420d32f4edad0b1425ad90f80e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.html#abca528420d32f4edad0b1425ad90f80e">IsInverse</a> (const <a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> &amp;other) const</td></tr>
<tr class="separator:abca528420d32f4edad0b1425ad90f80e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00314">314</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="acaddf65e487df26a73b4e90cbfc0ada9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acaddf65e487df26a73b4e90cbfc0ada9">&#9670;&nbsp;</a></span>ArrayType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="classarmnn_1_1_permutation_vector.html#acaddf65e487df26a73b4e90cbfc0ada9">ArrayType</a> = std::array&lt;<a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a>, <a class="el" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00319">319</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a065e980f27e65a118d3b071ab077cfda"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a065e980f27e65a118d3b071ab077cfda">&#9670;&nbsp;</a></span>ConstIterator</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="classarmnn_1_1_permutation_vector.html#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a> = typename ArrayType::const_iterator</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00320">320</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a12b132c42f8e60ebc9669a3b333bb946"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a12b132c42f8e60ebc9669a3b333bb946">&#9670;&nbsp;</a></span>SizeType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> = unsigned int</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00318">318</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<a id="a9e70f27e3e424e90566080423b1fe2db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e70f27e3e424e90566080423b1fe2db">&#9670;&nbsp;</a></span>ValueType</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> = unsigned int</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00317">317</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a399359e369b182e7c86840d7b6a38c41"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a399359e369b182e7c86840d7b6a38c41">&#9670;&nbsp;</a></span>PermutationVector() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> *&#160;</td>
<td class="paramname"><em>dimMappings</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a>&#160;</td>
<td class="paramname"><em>numDimMappings</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">dimMappings</td><td>- Indicates how to translate tensor elements from a given source into the target destination, when source and target potentially have different memory layouts.</td></tr>
</table>
</dd>
</dl>
<p>E.g. For a 4-d tensor laid out in a memory with the format (Batch Element, Height, Width, Channels), which is to be passed as an input to ArmNN, each source dimension is mapped to the corresponding ArmNN dimension. The Batch dimension remains the same (0 -&gt; 0). The source Height dimension is mapped to the location of the ArmNN Height dimension (1 -&gt; 2). Similar arguments are made for the Width and Channels (2 -&gt; 3 and 3 -&gt; 1). This will lead to m_DimMappings pointing to the following array: [ 0, 2, 3, 1 ].</p>
<p>Note that the mapping should be reversed if considering the case of ArmNN 4-d outputs (Batch Element, Channels, Height, Width) being written to a destination with the format mentioned above. We now have 0 -&gt; 0, 2 -&gt; 1, 3 -&gt; 2, 1 -&gt; 3, which, when reordered, lead to the following m_DimMappings contents: [ 0, 3, 1, 2 ]. </p>
<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.html#l00020">20</a> of file <a class="el" href="_descriptors_8cpp_source.html">Descriptors.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="comment">// Validation</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">if</span> (numDimMappings &gt; <a class="code" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>)</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; fmt::format(<span class="stringliteral">&quot;The number of mappings ({0}) cannot be greater &quot;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="stringliteral">&quot;than the maximum number of dimensions supported ({1})&quot;</span>,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; numDimMappings,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>));</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; }</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordflow">if</span> ((dimMappings == <span class="keyword">nullptr</span>) &amp;&amp; (numDimMappings != 0))</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; {</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Dimension mappings must not be NULL if the number of mappings is positive&quot;</span>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; i &lt; numDimMappings; ++i)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> dstIndex = dimMappings[i];</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (dstIndex &gt;= numDimMappings)</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; fmt::format(<span class="stringliteral">&quot;Dimension mapping at index {0} is invalid: &quot;</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="stringliteral">&quot;{1} is outside of the valid range [0,{2}]&quot;</span>,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; i,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; dstIndex,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; (numDimMappings - 1)));</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Validation: Detect duplicates</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::array&lt;bool, MaxNumOfTensorDimensions&gt; observedDims;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; observedDims.fill(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; i &lt; numDimMappings; ++i)</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> dstIndex = dimMappings[i];</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (observedDims[dstIndex])</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid dimension mappings: Two or more source dimensions are mapped &quot;</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="stringliteral">&quot;to the same output dimension&quot;</span>);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; observedDims[dstIndex] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// Initialize</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; i &lt; numDimMappings; ++i)</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; m_DimMappings[i] = dimMappings[i];</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; m_NumDimMappings = numDimMappings;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_8hpp_source.html#l00031">armnn::MaxNumOfTensorDimensions</a>.</p>
</div>
</div>
<a id="adb9aad0dc5def92d5749a0efad1ead58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adb9aad0dc5def92d5749a0efad1ead58">&#9670;&nbsp;</a></span>PermutationVector() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> </td>
<td>(</td>
<td class="paramtype">std::initializer_list&lt; <a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> &gt;&#160;</td>
<td class="paramname"><em>dimMappings</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_descriptors_8cpp_source.html#l00077">77</a> of file <a class="el" href="_descriptors_8cpp_source.html">Descriptors.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; : <a class="code" href="classarmnn_1_1_permutation_vector.html#a399359e369b182e7c86840d7b6a38c41">PermutationVector</a>(dimMappings.begin(), armnn::numeric_cast&lt;SizeType&gt;(dimMappings.size()))</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;{</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ad5fee900c7aee90671038c79225bf8ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5fee900c7aee90671038c79225bf8ec">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_permutation_vector.html#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a> begin </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00359">359</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;{ <span class="keywordflow">return</span> m_DimMappings.begin(); }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_transpose_operator_8cpp_source.html#l00008">ConvertTransposeToTosaOperator()</a>.</p>
</div>
</div>
<a id="a69b6e2a03c835ca5d658a1f16acbaa9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a69b6e2a03c835ca5d658a1f16acbaa9c">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_permutation_vector.html#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a> end </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<dl class="section return"><dt>Returns</dt><dd>pointer one past the end of the number of mapping not the length of m_DimMappings. </dd></dl>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00364">364</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;{ <span class="keywordflow">return</span> m_DimMappings.begin() + m_NumDimMappings; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_transpose_operator_8cpp_source.html#l00008">ConvertTransposeToTosaOperator()</a>.</p>
</div>
</div>
<a id="a490ec6b59006d1fe1ec2ea30e69fb97c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a490ec6b59006d1fe1ec2ea30e69fb97c">&#9670;&nbsp;</a></span>GetSize()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> GetSize </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00357">357</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;{ <span class="keywordflow">return</span> m_NumDimMappings; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_conversion_utils_8cpp_source.html#l00086">ConstTensorPin::ConstTensorPin()</a>, <a class="el" href="_onnx_parser_8cpp_source.html#l00602">armnnOnnxParser::CreateConstTensorImpl()</a>, <a class="el" href="_types_8hpp_source.html#l00376">PermutationVector::IsInverse()</a>, <a class="el" href="_types_8hpp_source.html#l00347">PermutationVector::operator[]()</a>, <a class="el" href="_permute_8cpp_source.html#l00125">armnnUtils::Permuted()</a>, <a class="el" href="_workload_utils_8cpp_source.html#l00018">armnn::PermuteTensor()</a>, <a class="el" href="_transpose_8cpp_source.html#l00125">armnnUtils::TransposeTensorShape()</a>, <a class="el" href="_workload_data_8cpp_source.html#l01492">PermuteQueueDescriptor::Validate()</a>, and <a class="el" href="_workload_data_8cpp_source.html#l03104">TransposeQueueDescriptor::Validate()</a>.</p>
</div>
</div>
<a id="aae44e4154aa80fba7616747450ff69d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aae44e4154aa80fba7616747450ff69d5">&#9670;&nbsp;</a></span>IsEqual()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool IsEqual </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> &amp;&#160;</td>
<td class="paramname"><em>other</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00366">366</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; {</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (m_NumDimMappings != other.m_NumDimMappings) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<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> i = 0; i &lt; m_NumDimMappings; ++i)</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">if</span> (m_DimMappings[i] != other.m_DimMappings[i]) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div>
</div><!-- fragment -->
<p class="reference">Referenced by <a class="el" href="_transpose_layer_8hpp_source.html#l00054">TransposeLayer::IsEqual()</a>, <a class="el" href="_permute_layer_8hpp_source.html#l00055">PermuteLayer::IsEqual()</a>, <a class="el" href="_descriptors_8hpp_source.html#l00159">PermuteDescriptor::operator==()</a>, and <a class="el" href="_descriptors_8hpp_source.html#l01500">TransposeDescriptor::operator==()</a>.</p>
</div>
</div>
<a id="abca528420d32f4edad0b1425ad90f80e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abca528420d32f4edad0b1425ad90f80e">&#9670;&nbsp;</a></span>IsInverse()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool IsInverse </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a> &amp;&#160;</td>
<td class="paramname"><em>other</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00376">376</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; {</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">bool</span> isInverse = (<a class="code" href="classarmnn_1_1_permutation_vector.html#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>() == other.GetSize());</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; isInverse &amp;&amp; (i &lt; <a class="code" href="classarmnn_1_1_permutation_vector.html#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>()); ++i)</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; {</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; isInverse = (m_DimMappings[other.m_DimMappings[i]] == i);</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> isInverse;</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_8hpp_source.html#l00357">PermutationVector::GetSize()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_transpose_layer_8hpp_source.html#l00045">TransposeLayer::IsInverse()</a>, and <a class="el" href="_permute_layer_8hpp_source.html#l00046">PermuteLayer::IsInverse()</a>.</p>
</div>
</div>
<a id="a86e55f7d14b21da3b31280412be96bd7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a86e55f7d14b21da3b31280412be96bd7">&#9670;&nbsp;</a></span>operator[]()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> operator[] </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a>&#160;</td>
<td class="paramname"><em>i</em></td><td>)</td>
<td> const</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Indexing method with out-of-bounds error checking for the m_DimMappings array. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">i</td><td>- integer value corresponding to index of m_DimMappings array to retrieve element from. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>element at index i of m_DimMappings array. </dd></dl>
<dl class="exception"><dt>Exceptions</dt><dd>
<table class="exception">
<tr><td class="paramname"><a class="el" href="classarmnn_1_1_invalid_argument_exception.html">InvalidArgumentException</a></td><td>when indexing out-of-bounds index of m_DimMappings array. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.html#l00347">347</a> of file <a class="el" href="_types_8hpp_source.html">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordflow">if</span> (i &gt;= <a class="code" href="classarmnn_1_1_permutation_vector.html#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>())</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; {</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(<span class="stringliteral">&quot;Invalid indexing of PermutationVector of size &quot;</span> + std::to_string(<a class="code" href="classarmnn_1_1_permutation_vector.html#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>())</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; + <span class="stringliteral">&quot; at location [&quot;</span> + std::to_string(i) + <span class="stringliteral">&quot;].&quot;</span>);</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> m_DimMappings.at(i);</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div>
</div><!-- fragment -->
<p class="reference">References <a class="el" href="_types_8hpp_source.html#l00357">PermutationVector::GetSize()</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>include/armnn/<a class="el" href="_types_8hpp_source.html">Types.hpp</a></li>
<li>src/armnn/<a class="el" href="_descriptors_8cpp_source.html">Descriptors.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="anamespacearmnn_html_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.html#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00031">Types.hpp:31</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_permutation_vector_html_a490ec6b59006d1fe1ec2ea30e69fb97c"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.html#a490ec6b59006d1fe1ec2ea30e69fb97c">armnn::PermutationVector::GetSize</a></div><div class="ttdeci">SizeType GetSize() const</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00357">Types.hpp:357</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_permutation_vector_html_a9e70f27e3e424e90566080423b1fe2db"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.html#a9e70f27e3e424e90566080423b1fe2db">armnn::PermutationVector::ValueType</a></div><div class="ttdeci">unsigned int ValueType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00317">Types.hpp:317</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_permutation_vector_html_a399359e369b182e7c86840d7b6a38c41"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.html#a399359e369b182e7c86840d7b6a38c41">armnn::PermutationVector::PermutationVector</a></div><div class="ttdeci">PermutationVector(const ValueType *dimMappings, SizeType numDimMappings)</div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8cpp_source.html#l00020">Descriptors.cpp:20</a></div></div>
<div class="ttc" id="aclassarmnn_1_1_permutation_vector_html_a12b132c42f8e60ebc9669a3b333bb946"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.html#a12b132c42f8e60ebc9669a3b333bb946">armnn::PermutationVector::SizeType</a></div><div class="ttdeci">unsigned int SizeType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.html#l00318">Types.hpp:318</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacearmnn.html">armnn</a></li><li class="navelem"><a class="el" href="classarmnn_1_1_permutation_vector.html">PermutationVector</a></li>
<li class="footer">Generated on Wed Feb 14 2024 16:36:24 for Arm NN by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>
</html>