blob: 0392d691af0318acb1a346287452f9403b2e2c4a [file] [log] [blame]
<!-- Copyright (c) 2020 ARM Limited. -->
<!-- -->
<!-- SPDX-License-Identifier: MIT -->
<!-- -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: 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>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
<td style="padding-left: 0.5em;">
<div id="projectname">
&#160;<span id="projectnumber">20.02</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classarmnn_1_1_permutation_vector.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="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.xhtml">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.xhtml">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.xhtml#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.xhtml#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.xhtml#acaddf65e487df26a73b4e90cbfc0ada9">ArrayType</a> = std::array&lt; <a class="el" href="classarmnn_1_1_permutation_vector.xhtml#a9e70f27e3e424e90566080423b1fe2db">ValueType</a>, <a class="el" href="namespacearmnn.xhtml#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.xhtml#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.xhtml#a399359e369b182e7c86840d7b6a38c41">PermutationVector</a> (const <a class="el" href="classarmnn_1_1_permutation_vector.xhtml#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> *dimMappings, <a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#adb9aad0dc5def92d5749a0efad1ead58">PermutationVector</a> (std::initializer_list&lt; <a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#a9e70f27e3e424e90566080423b1fe2db">ValueType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml#a86e55f7d14b21da3b31280412be96bd7">operator[]</a> (<a class="el" href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i) const</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.xhtml#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#a065e980f27e65a118d3b071ab077cfda">ConstIterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#aae44e4154aa80fba7616747450ff69d5">IsEqual</a> (const <a class="el" href="classarmnn_1_1_permutation_vector.xhtml">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.xhtml#abca528420d32f4edad0b1425ad90f80e">IsInverse</a> (const <a class="el" href="classarmnn_1_1_permutation_vector.xhtml">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.xhtml#l00173">173</a> of file <a class="el" href="_types_8hpp_source.xhtml">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.xhtml#acaddf65e487df26a73b4e90cbfc0ada9">ArrayType</a> = std::array&lt;<a class="el" href="classarmnn_1_1_permutation_vector.xhtml#a9e70f27e3e424e90566080423b1fe2db">ValueType</a>, <a class="el" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00178">178</a> of file <a class="el" href="_types_8hpp_source.xhtml">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.xhtml#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.xhtml#l00179">179</a> of file <a class="el" href="_types_8hpp_source.xhtml">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.xhtml#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.xhtml#l00177">177</a> of file <a class="el" href="_types_8hpp_source.xhtml">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.xhtml#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.xhtml#l00176">176</a> of file <a class="el" href="_types_8hpp_source.xhtml">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.xhtml">PermutationVector</a> </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#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.xhtml#l00018">18</a> of file <a class="el" href="_descriptors_8cpp_source.xhtml">Descriptors.cpp</a>.</p>
<p class="reference">References <a class="el" href="_types_8hpp_source.xhtml#l00018">armnn::MaxNumOfTensorDimensions</a>.</p>
<div class="fragment"><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="comment">// Validation</span></div><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="keywordflow">if</span> (numDimMappings &gt; <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>)</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; boost::format fmt(<span class="stringliteral">&quot;The number of mappings (%1%) cannot be greater &quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="stringliteral">&quot;than the maximum number of dimensions supported (%2%)&quot;</span>);</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(boost::str(fmt % numDimMappings % <a class="code" href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">MaxNumOfTensorDimensions</a>));</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> ((dimMappings == <span class="keyword">nullptr</span>) &amp;&amp; (numDimMappings != 0))</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</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="l00032"></a><span class="lineno"> 32</span>&#160; }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; i &lt; numDimMappings; ++i)</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> dstIndex = dimMappings[i];</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">if</span> (dstIndex &gt;= numDimMappings)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; boost::format fmt(<span class="stringliteral">&quot;Dimension mapping at index %1% is invalid: %2% is outside of the valid range [0,%3%]&quot;</span>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">throw</span> InvalidArgumentException(boost::str(fmt % i % dstIndex % (numDimMappings - 1)));</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</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;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// Validation: Detect duplicates</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::array&lt;bool, MaxNumOfTensorDimensions&gt; observedDims;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; observedDims.fill(<span class="keyword">false</span>);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; i &lt; numDimMappings; ++i)</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; <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> dstIndex = dimMappings[i];</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (observedDims[dstIndex])</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; <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="l00055"></a><span class="lineno"> 55</span>&#160; <span class="stringliteral">&quot;to the same output dimension&quot;</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; observedDims[dstIndex] = <span class="keyword">true</span>;</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; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// Initialize</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; i &lt; numDimMappings; ++i)</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; m_DimMappings[i] = dimMappings[i];</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; m_NumDimMappings = numDimMappings;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a9e70f27e3e424e90566080423b1fe2db"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#a9e70f27e3e424e90566080423b1fe2db">armnn::PermutationVector::ValueType</a></div><div class="ttdeci">unsigned int ValueType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00176">Types.hpp:176</a></div></div>
<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a12b132c42f8e60ebc9669a3b333bb946"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">armnn::PermutationVector::SizeType</a></div><div class="ttdeci">unsigned int SizeType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00177">Types.hpp:177</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_abdcd184ed3bd648bb31d385040cafd5d"><div class="ttname"><a href="namespacearmnn.xhtml#abdcd184ed3bd648bb31d385040cafd5d">armnn::MaxNumOfTensorDimensions</a></div><div class="ttdeci">constexpr unsigned int MaxNumOfTensorDimensions</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00018">Types.hpp:18</a></div></div>
</div><!-- fragment -->
</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.xhtml">PermutationVector</a> </td>
<td>(</td>
<td class="paramtype">std::initializer_list&lt; <a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#l00069">69</a> of file <a class="el" href="_descriptors_8cpp_source.xhtml">Descriptors.cpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; : <a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a399359e369b182e7c86840d7b6a38c41">PermutationVector</a>(dimMappings.begin(), <a class="code" href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">boost::numeric_cast</a>&lt;<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a>&gt;(dimMappings.size()))</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;}</div><div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a399359e369b182e7c86840d7b6a38c41"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#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.xhtml#l00018">Descriptors.cpp:18</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a37fa39012e90d568df7f774cd6d1e956"><div class="ttname"><a href="namespacearmnn.xhtml#a37fa39012e90d568df7f774cd6d1e956">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00033">NumericCast.hpp:33</a></div></div>
<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a12b132c42f8e60ebc9669a3b333bb946"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">armnn::PermutationVector::SizeType</a></div><div class="ttdeci">unsigned int SizeType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00177">Types.hpp:177</a></div></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.xhtml#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.xhtml#l00204">204</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;{ <span class="keywordflow">return</span> m_DimMappings.begin(); }</div></div><!-- fragment -->
</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.xhtml#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">
<p class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00205">205</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;{ <span class="keywordflow">return</span> m_DimMappings.end(); }</div></div><!-- fragment -->
</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.xhtml#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.xhtml#l00202">202</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_types_8hpp_source.xhtml#l00217">PermutationVector::IsInverse()</a>, <a class="el" href="_permute_8cpp_source.xhtml#l00098">armnnUtils::Permuted()</a>, <a class="el" href="_workload_utils_8cpp_source.xhtml#l00013">armnn::PermuteTensor()</a>, <a class="el" href="_permute_as_reshape_8hpp_source.xhtml#l00018">PermuteAsReshapeImpl::Run()</a>, <a class="el" href="_transpose_as_reshape_8hpp_source.xhtml#l00018">TransposeAsReshapeImpl::Run()</a>, <a class="el" href="armnn_utils_2_transpose_8cpp_source.xhtml#l00098">armnnUtils::TransposeTensorShape()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l01287">PermuteQueueDescriptor::Validate()</a>, <a class="el" href="_workload_data_8cpp_source.xhtml#l02725">TransposeQueueDescriptor::Validate()</a>, <a class="el" href="_serializer_8cpp_source.xhtml#l00801">SerializerVisitor::VisitPermuteLayer()</a>, and <a class="el" href="_serializer_8cpp_source.xhtml#l01306">SerializerVisitor::VisitTransposeLayer()</a>.</p>
<div class="fragment"><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;{ <span class="keywordflow">return</span> m_NumDimMappings; }</div></div><!-- fragment -->
</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.xhtml">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.xhtml#l00207">207</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
<p class="reference">Referenced by <a class="el" href="_transpose_layer_8hpp_source.xhtml#l00052">TransposeLayer::IsEqual()</a>, <a class="el" href="_permute_layer_8hpp_source.xhtml#l00054">PermuteLayer::IsEqual()</a>, and <a class="el" href="_concat_test_impl_8cpp_source.xhtml#l00171">PermuteInputsForConcat()</a>.</p>
<div class="fragment"><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</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="l00213"></a><span class="lineno"> 213</span>&#160; }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div></div><!-- fragment -->
</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.xhtml">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.xhtml#l00217">217</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
<p class="reference">References <a class="el" href="_types_8hpp_source.xhtml#l00202">PermutationVector::GetSize()</a>.</p>
<p class="reference">Referenced by <a class="el" href="_transpose_layer_8hpp_source.xhtml#l00043">TransposeLayer::IsInverse()</a>, and <a class="el" href="_permute_layer_8hpp_source.xhtml#l00045">PermuteLayer::IsInverse()</a>.</p>
<div class="fragment"><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">bool</span> isInverse = (<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>() == other.GetSize());</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">SizeType</a> i = 0; isInverse &amp;&amp; (i &lt; <a class="code" href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">GetSize</a>()); ++i)</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; isInverse = (m_DimMappings[other.m_DimMappings[i]] == i);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> isInverse;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div><div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a490ec6b59006d1fe1ec2ea30e69fb97c"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#a490ec6b59006d1fe1ec2ea30e69fb97c">armnn::PermutationVector::GetSize</a></div><div class="ttdeci">SizeType GetSize() const</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00202">Types.hpp:202</a></div></div>
<div class="ttc" id="classarmnn_1_1_permutation_vector_xhtml_a12b132c42f8e60ebc9669a3b333bb946"><div class="ttname"><a href="classarmnn_1_1_permutation_vector.xhtml#a12b132c42f8e60ebc9669a3b333bb946">armnn::PermutationVector::SizeType</a></div><div class="ttdeci">unsigned int SizeType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00177">Types.hpp:177</a></div></div>
</div><!-- fragment -->
</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.xhtml#a9e70f27e3e424e90566080423b1fe2db">ValueType</a> operator[] </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml#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 class="definition">Definition at line <a class="el" href="_types_8hpp_source.xhtml#l00200">200</a> of file <a class="el" href="_types_8hpp_source.xhtml">Types.hpp</a>.</p>
<div class="fragment"><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{ <span class="keywordflow">return</span> m_DimMappings.at(i); }</div></div><!-- fragment -->
</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.xhtml">Types.hpp</a></li>
<li>src/armnn/<a class="el" href="_descriptors_8cpp_source.xhtml">Descriptors.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="namespacearmnn.xhtml">armnn</a></li><li class="navelem"><a class="el" href="classarmnn_1_1_permutation_vector.xhtml">PermutationVector</a></li>
<li class="footer">Generated on Fri Mar 13 2020 16:09:19 for ArmNN by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>