aboutsummaryrefslogtreecommitdiffstats
path: root/matrix_8h_source.html
blob: 51e9590d98366de2f650d780abcb23ac5ceb2400 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<!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="viewport" content="width=device-width, initial-scale=1"/>
<title>YAGE: yage/math/matrix.h Source File</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>
<link href="doxygen.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;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">YAGE
   &#160;<span id="projectnumber">v0.1.1</span>
   </div>
   <div id="projectbrief">Yet Another Game Engine</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('matrix_8h_source.html','');});
</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="headertitle">
<div class="title">matrix.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="matrix_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/* ----------------------------------------------------------------------------</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * matrix.h</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright (c) 2017 Yann Herklotz Grave &lt;ymherklotz@gmail.com&gt; -- MIT License</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * See file LICENSE for more details</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * ----------------------------------------------------------------------------</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#ifndef YAGE_MATH_MATRIX_H</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#define YAGE_MATH_MATRIX_H</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;exception&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</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="keyword">namespace </span><a class="code" href="namespaceyage.html">yage</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;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> Rows, <span class="keywordtype">int</span> Cols, <span class="keyword">class</span> Type&gt;</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html">   26</a></span>&#160;<span class="keyword">class </span><a class="code" href="classyage_1_1Matrix.html">Matrix</a>;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">namespace </span>details</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="l00046"></a><span class="lineno">   46</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> Rows, <span class="keywordtype">int</span> Cols, <span class="keyword">class</span> Type&gt;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classyage_1_1details_1_1Row.html">   47</a></span>&#160;<span class="keyword">class </span><a class="code" href="classyage_1_1details_1_1Row.html">Row</a></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="keyword">private</span>:</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classyage_1_1details_1_1Row.html#a9c781b74460f4cb429de8838f74857d8">   50</a></span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a> *<a class="code" href="classyage_1_1details_1_1Row.html#a9c781b74460f4cb429de8838f74857d8">parent_</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classyage_1_1details_1_1Row.html#a438164456acdb9e20c3e13ef9e43d5b3">   51</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="classyage_1_1details_1_1Row.html#a438164456acdb9e20c3e13ef9e43d5b3">index_</a>;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classyage_1_1details_1_1Row.html#a18904acbce1c6084bc25a753989b5f06">   54</a></span>&#160;    <a class="code" href="classyage_1_1details_1_1Row.html">Row&lt;Rows, Cols, Type&gt;</a>(<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a> *parent, <span class="keywordtype">int</span> index)</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;        : <a class="code" href="classyage_1_1details_1_1Row.html#a9c781b74460f4cb429de8838f74857d8">parent_</a>(parent), <a class="code" href="classyage_1_1details_1_1Row.html#a438164456acdb9e20c3e13ef9e43d5b3">index_</a>(index)</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;    }</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"><a class="line" href="classyage_1_1details_1_1Row.html#a703d4eee36d93b1227ad734bdcf27190">   59</a></span>&#160;    Type &amp;<a class="code" href="classyage_1_1details_1_1Row.html#a703d4eee36d93b1227ad734bdcf27190">operator[]</a>(<span class="keywordtype">int</span> col)</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">// The index is the y-position of the element in the matrix</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;        <span class="keywordflow">return</span> parent_-&gt;<a class="code" href="classyage_1_1Matrix.html#a0ab11922319366f6e74f6e9e7d7abeed">data_</a>[index_ * Cols + col];</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;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classyage_1_1details_1_1Row.html#a917fa3a09ab89fd610634066a40c74c8">   65</a></span>&#160;    <span class="keyword">const</span> Type &amp;<a class="code" href="classyage_1_1details_1_1Row.html#a917fa3a09ab89fd610634066a40c74c8">operator[]</a>(<span class="keywordtype">int</span> col)<span class="keyword"> const</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">return</span> parent_-&gt;<a class="code" href="classyage_1_1Matrix.html#a0ab11922319366f6e74f6e9e7d7abeed">data_</a>[index_ * Cols + col];</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;};</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;} <span class="comment">// namespace details</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> Rows = 4, <span class="keywordtype">int</span> Cols = 4, <span class="keyword">class</span> Type = <span class="keywordtype">double</span>&gt;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="keyword">class </span><a class="code" href="classyage_1_1Matrix.html">Matrix</a></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;{</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="comment">// friended with the row class so that it can access protected member data.</span></div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a9e9cbf0fd7c768696ef909bdac1a706d">   79</a></span>&#160;    <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classyage_1_1details_1_1Row.html">details::Row</a>&lt;Rows, Cols, Type&gt;;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a0ab11922319366f6e74f6e9e7d7abeed">   83</a></span>&#160;    std::vector&lt;Type&gt; <a class="code" href="classyage_1_1Matrix.html#a0ab11922319366f6e74f6e9e7d7abeed">data_</a>;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a73b7d1f94f4f72a2294b71b3a35794ad">   87</a></span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a>() : data_(Rows * Cols) {}</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a191b02ff353d04f18779d4c84e20927b">   88</a></span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a>(<span class="keyword">const</span> std::vector&lt;Type&gt; &amp;data) : data_(data) {}</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#acaf0837fade0cb4179603b97ac224965">   91</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="classyage_1_1Matrix.html#acaf0837fade0cb4179603b97ac224965">rowSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Rows; }</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a2753285bcc49a050a49976a6dbc8e89a">   94</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="classyage_1_1Matrix.html#a2753285bcc49a050a49976a6dbc8e89a">colSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> Cols; }</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#adffb22a99417271958621ff1f51b7f08">  101</a></span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;1, Cols, Type&gt;</a> <a class="code" href="classyage_1_1Matrix.html#adffb22a99417271958621ff1f51b7f08">getRow</a>(<span class="keywordtype">int</span> row)<span class="keyword"> const</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;1, Cols, Type&gt;</a> rowMatrix;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; Cols; ++i) {</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;            rowMatrix[0][i] = data_[row][i];</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        }</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        <span class="keywordflow">return</span> rowMatrix;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    }</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a2833adcae1e01f637eba251c5aee7888">  115</a></span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, 1, Type&gt;</a> <a class="code" href="classyage_1_1Matrix.html#a2833adcae1e01f637eba251c5aee7888">getCol</a>(<span class="keywordtype">int</span> col)<span class="keyword"> const</span></div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, 1, Type&gt;</a> colMatrix;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; Rows; ++i) {</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;            colMatrix[i][0] = data_[i][col];</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        }</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        <span class="keywordflow">return</span> colMatrix;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    }</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a83d77d3a40ced5e2b703a6d66b6e6055">  128</a></span>&#160;    <span class="keyword">typename</span> std::vector&lt;Type&gt;::iterator <a class="code" href="classyage_1_1Matrix.html#a83d77d3a40ced5e2b703a6d66b6e6055">begin</a>() { <span class="keywordflow">return</span> data_.begin(); }</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a20ea5fe16d27ef15f775b5497cadc851">  134</a></span>&#160;    <span class="keyword">typename</span> std::vector&lt;Type&gt;::iterator <a class="code" href="classyage_1_1Matrix.html#a20ea5fe16d27ef15f775b5497cadc851">end</a>() { <span class="keywordflow">return</span> data_.end(); }</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#aaa7273d046ac077da76ffaec876041d7">  142</a></span>&#160;    <span class="keyword">virtual</span> std::string <a class="code" href="classyage_1_1Matrix.html#aaa7273d046ac077da76ffaec876041d7">toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        ss &lt;&lt; <span class="charliteral">&#39;[&#39;</span>;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; Rows - 1; ++i) {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;            ss &lt;&lt; <span class="charliteral">&#39;[&#39;</span>;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;            <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; Cols - 1; ++j) {</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;                ss &lt;&lt; data_[i * Cols + j] &lt;&lt; <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;            }</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;            ss &lt;&lt; data_[(Rows - 1) * Cols + Cols - 1] &lt;&lt; <span class="stringliteral">&quot;],&quot;</span>;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        }</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        ss &lt;&lt; <span class="charliteral">&#39;[&#39;</span>;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; Cols - 1; ++j) {</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;            ss &lt;&lt; data_[(Rows - 1) * Cols + j] &lt;&lt; <span class="charliteral">&#39; &#39;</span>;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        }</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        ss &lt;&lt; data_[(Rows - 1) * Cols + Cols - 1] &lt;&lt; <span class="stringliteral">&quot;]]&quot;</span>;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    }</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a89e826d2c6646002cfae23dde7f61145">  161</a></span>&#160;    <a class="code" href="classyage_1_1details_1_1Row.html">details::Row&lt;Rows, Cols, Type&gt;</a> <a class="code" href="classyage_1_1Matrix.html#a89e826d2c6646002cfae23dde7f61145">operator[]</a>(<span class="keywordtype">int</span> row)</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    {</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classyage_1_1details_1_1Row.html">details::Row&lt;Rows, Cols, Type&gt;</a>(<span class="keyword">this</span>, row);</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    }</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a0851891b2575ca0634d8a4a0696b8346">  166</a></span>&#160;    <a class="code" href="classyage_1_1details_1_1Row.html">details::Row&lt;Rows, Cols, Type&gt;</a> <a class="code" href="classyage_1_1Matrix.html#a0851891b2575ca0634d8a4a0696b8346">operator[]</a>(<span class="keywordtype">int</span> row)<span class="keyword"> const</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classyage_1_1details_1_1Row.html">details::Row&lt;Rows, Cols, Type&gt;</a>((<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a> *)<span class="keyword">this</span>,</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;                                             row);</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    }</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#a8b7e0913efdb5e8c9ff39df4c4f36228">  172</a></span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a> &amp;<a class="code" href="classyage_1_1Matrix.html#a8b7e0913efdb5e8c9ff39df4c4f36228">operator+=</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a> &amp;rhs)</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    {</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        std::vector&lt;Type&gt; out;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        out.reserve(data_.size());</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        std::transform(data_.begin(), data_.end(), rhs.<a class="code" href="classyage_1_1Matrix.html#a0ab11922319366f6e74f6e9e7d7abeed">data_</a>.begin(),</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;                       std::back_inserter(out),</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;                       [](Type a, Type b) { <span class="keywordflow">return</span> a + b; });</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;        data_ = std::move(out);</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    }</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classyage_1_1Matrix.html#acc2d0763f060c923ce53b37143d0a7bb">  183</a></span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a> &amp;<a class="code" href="classyage_1_1Matrix.html#acc2d0763f060c923ce53b37143d0a7bb">operator-=</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, Cols, Type&gt;</a> &amp;rhs)</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    {</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        std::vector&lt;Type&gt; out;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        out.reserve(data_.size());</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        std::transform(data_.begin(), data_.end(), rhs.<a class="code" href="classyage_1_1Matrix.html#a83d77d3a40ced5e2b703a6d66b6e6055">begin</a>(),</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                       std::back_inserter(out),</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;                       [](Type a, Type b) { <span class="keywordflow">return</span> a - b; });</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        data_ = std::move(out);</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    }</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;};</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="namespaceyage.html#a226cc29763f745fd175844f4263d5dae">  196</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#a226cc29763f745fd175844f4263d5dae">operator+</a>(<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> lhs, <span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> &amp;rhs)</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;{</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    lhs += rhs;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;}</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="namespaceyage.html#a2187fb11298a029f2877702192717090">  203</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#a2187fb11298a029f2877702192717090">operator-</a>(<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> lhs, <span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> &amp;rhs)</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;{</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    lhs -= rhs;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;}</div><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="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="namespaceyage.html#a6b77afaa1cd077df90b9daccbfc2cbae">  210</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#a226cc29763f745fd175844f4263d5dae">operator+</a>(<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> lhs, <span class="keyword">const</span> T &amp;rhs)</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">for</span> (<span class="keyword">auto</span> &amp;data : lhs) {</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;        data += rhs;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    }</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;}</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="namespaceyage.html#a947133b8fc764d9fc5c5d8b08821cf32">  219</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#a226cc29763f745fd175844f4263d5dae">operator+</a>(<span class="keyword">const</span> T &amp;lhs, <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> rhs)</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;{</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;data : rhs) {</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        data += lhs;</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> rhs;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;}</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="namespaceyage.html#a8a9db24697f649f6d19f0347330d95fe">  228</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#a2187fb11298a029f2877702192717090">operator-</a>(<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> lhs, <span class="keyword">const</span> T &amp;rhs)</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;{</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;data : lhs) {</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        data -= rhs;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    }</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;}</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="namespaceyage.html#ad9344d41af72f29cd6f8cf1ef62ed3cc">  237</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#a2187fb11298a029f2877702192717090">operator-</a>(<span class="keyword">const</span> T &amp;lhs, <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> rhs)</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;{</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;data : rhs) {</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        data = lhs - data;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    }</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;}</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="namespaceyage.html#ad8903f6a93ac89f16846458540717507">  246</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#ad8903f6a93ac89f16846458540717507">operator*</a>(<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> lhs, <span class="keyword">const</span> T &amp;rhs)</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;{</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;data : lhs) {</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        data *= rhs;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    }</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;}</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="namespaceyage.html#a090cbd6b767b583364e9cbe78d8a8d5a">  255</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#ad8903f6a93ac89f16846458540717507">operator*</a>(<span class="keyword">const</span> T &amp;lhs, <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> rhs)</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;{</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;data : rhs) {</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        data *= lhs;</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    }</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keywordflow">return</span> rhs;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;}</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="namespaceyage.html#acca4a23afb94173695bbc1e1f2cde2b3">  264</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> <a class="code" href="namespaceyage.html#acca4a23afb94173695bbc1e1f2cde2b3">operator/</a>(<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> lhs, <span class="keyword">const</span> T &amp;rhs)</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;{</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;data : lhs) {</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        data /= rhs;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    }</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <span class="keywordflow">return</span> lhs;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;}</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="namespaceyage.html#a5ddd829cb1c7c4c880d0fd53326858fe">  273</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="namespaceyage.html#a5ddd829cb1c7c4c880d0fd53326858fe">operator==</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> &amp;lhs, <span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> &amp;rhs)</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;{</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; M; ++i) {</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; N; ++j) {</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;            <span class="keywordflow">if</span> (lhs[i][j] != rhs[i][j]) {</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;                <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;            }</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;        }</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    }</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;}</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="namespaceyage.html#a7ed614bc9d3e8b9f3f8d32b6a7ff28eb">  286</a></span>&#160;std::ostream &amp;operator&lt;&lt;(std::ostream &amp;os, const Matrix&lt;M, N, T&gt; &amp;mat)</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;{</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    <span class="keywordflow">return</span> os &lt;&lt; mat.toString();</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;}</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> Rows = 2, <span class="keyword">class</span> Type = <span class="keywordtype">double</span>&gt;</div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classyage_1_1Vector.html">  292</a></span>&#160;<span class="keyword">class </span><a class="code" href="classyage_1_1Vector.html">Vector</a> : <span class="keyword">public</span> <a class="code" href="classyage_1_1Matrix.html">Matrix</a>&lt;Rows, 1, Type&gt;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;{</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="classyage_1_1Vector.html#ac9b202913c03bde201e350e855fbbffa">  295</a></span>&#160;    <a class="code" href="classyage_1_1Vector.html">Vector&lt;Rows, Type&gt;</a>() : <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, 1, Type&gt;</a>() {}</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classyage_1_1Vector.html#a55fd6c60a95832ad4b68083071f9866f">  296</a></span>&#160;    <a class="code" href="classyage_1_1Vector.html">Vector&lt;Rows, Type&gt;</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, 1, Type&gt;</a> &amp;other)</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        : <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, 1, Type&gt;</a>(other)</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    {</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    }</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classyage_1_1Vector.html#aa291a8ee264f81165b529b7f3a0c265d">  301</a></span>&#160;    <a class="code" href="classyage_1_1Vector.html">Vector&lt;Rows, Type&gt;</a>(<span class="keyword">const</span> std::vector&lt;Type&gt; &amp;data)</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;        : <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;Rows, 1, Type&gt;</a>(data)</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    {</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    }</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classyage_1_1Vector.html#a81efa1cb9d4ce8bb8c5cf9652a5650a2">  306</a></span>&#160;    Type &amp;<a class="code" href="classyage_1_1Vector.html#a81efa1cb9d4ce8bb8c5cf9652a5650a2">operator[]</a>(<span class="keywordtype">int</span> col) { <span class="keywordflow">return</span> this-&gt;data_[col]; }</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classyage_1_1Vector.html#a1e9c60516faeb06826666493a7ca307a">  308</a></span>&#160;    <span class="keyword">const</span> Type &amp;<a class="code" href="classyage_1_1Vector.html#a1e9c60516faeb06826666493a7ca307a">operator[]</a>(<span class="keywordtype">int</span> col)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;data_[col]; }</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;</div><div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classyage_1_1Vector.html#a956f7b6d02c0309adece311f59c8beae">  310</a></span>&#160;    std::string <a class="code" href="classyage_1_1Vector.html#a956f7b6d02c0309adece311f59c8beae">toString</a>()<span class="keyword"> const override</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;<span class="keyword">    </span>{</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;        std::stringstream ss;</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        ss &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        <span class="keywordflow">for</span> (std::size_t i = 0; i &lt; this-&gt;data_.size() - 1; ++i) {</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;            ss &lt;&lt; this-&gt;data_[i] &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        }</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        ss &lt;&lt; this-&gt;data_[this-&gt;data_.size() - 1] &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        <span class="keywordflow">return</span> ss.str();</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    }</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;};</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> Type = <span class="keywordtype">double</span>&gt;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html">  327</a></span>&#160;<span class="keyword">class </span><a class="code" href="classyage_1_1Vector2.html">Vector2</a> : <span class="keyword">public</span> <a class="code" href="classyage_1_1Vector.html">Vector</a>&lt;2, Type&gt;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;{</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#a50c108903be424de1c41ce31fddd23ea">  330</a></span>&#160;    <a class="code" href="classyage_1_1Vector2.html">Vector2&lt;Type&gt;</a>() : <a class="code" href="classyage_1_1Vector.html">Vector&lt;2, Type&gt;</a>() {}</div><div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#af69d534302a406bac419589e0a2f2917">  331</a></span>&#160;    <a class="code" href="classyage_1_1Vector2.html">Vector2&lt;Type&gt;</a>(<span class="keyword">const</span> std::vector&lt;Type&gt; &amp;data) : <a class="code" href="classyage_1_1Vector.html">Vector&lt;2, Type&gt;</a>(data) {}</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;</div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#a3ef3bc2954f387f1db2165a884765ad0">  333</a></span>&#160;    <a class="code" href="classyage_1_1Vector2.html">Vector2&lt;Type&gt;</a>(Type x, Type y)</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    {</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        this-&gt;data_[0] = x;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;        this-&gt;data_[1] = y;</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    }</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#aacee766d18741a925a47b91fa0080822">  339</a></span>&#160;    <a class="code" href="classyage_1_1Vector2.html">Vector2&lt;Type&gt;</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;2, 1, Type&gt;</a> &amp;other) : <a class="code" href="classyage_1_1Vector.html">Vector&lt;2, Type&gt;</a>(other) {}</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#a5a777413b63e68dc5f797d31e3d7beaf">  341</a></span>&#160;    Type &amp;<a class="code" href="classyage_1_1Vector2.html#a5a777413b63e68dc5f797d31e3d7beaf">x</a>() { <span class="keywordflow">return</span> this-&gt;data_[0]; }</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#a96360148b634862a31573f475b4fa53f">  343</a></span>&#160;    <span class="keyword">const</span> Type &amp;<a class="code" href="classyage_1_1Vector2.html#a96360148b634862a31573f475b4fa53f">x</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;data_[0]; }</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;</div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#a554645b415a76af47698985b7757f0c2">  345</a></span>&#160;    Type &amp;<a class="code" href="classyage_1_1Vector2.html#a554645b415a76af47698985b7757f0c2">y</a>() { <span class="keywordflow">return</span> this-&gt;data_[1]; }</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classyage_1_1Vector2.html#ab5e0499a78afced459600a867736a42e">  347</a></span>&#160;    <span class="keyword">const</span> Type &amp;<a class="code" href="classyage_1_1Vector2.html#ab5e0499a78afced459600a867736a42e">y</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;data_[1]; }</div><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;</div><div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="namespaceyage.html#a23eef341099a6b2816cf0c63f8ffe898">  352</a></span>&#160;<span class="keyword">using</span> <a class="code" href="classyage_1_1Vector2.html">Vector2d</a> = <a class="code" href="classyage_1_1Vector2.html">Vector2&lt;double&gt;</a>;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="namespaceyage_1_1matrix.html">  359</a></span>&#160;<span class="keyword">namespace </span>matrix</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;{</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="namespaceyage_1_1matrix.html#a62de4b4b6bab23717d957c370f2e41c7">  367</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;N, M, T&gt;</a> <a class="code" href="namespaceyage_1_1matrix.html#a62de4b4b6bab23717d957c370f2e41c7">transpose</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> &amp;m)</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;{</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;N, M, T&gt;</a> trans;</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; M; ++i) {</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; N; ++j) {</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;            trans[j][i] = m[i][j];</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        }</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    }</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="keywordflow">return</span> trans;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;}</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> R, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="namespaceyage_1_1matrix.html#ac4d2f55a5c3369ec42001776a582c30a">  383</a></span>&#160;T <a class="code" href="namespaceyage_1_1matrix.html#ac4d2f55a5c3369ec42001776a582c30a">dot</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;R, 1, T&gt;</a> &amp;m1, <span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;R, 1, T&gt;</a> &amp;m2)</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;{</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    T sum = 0;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; R; ++i) {</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;        sum += m1[i][0] * m2[i][0];</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    }</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    <span class="keywordflow">return</span> sum;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;}</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;<span class="keyword">template</span> &lt;<span class="keywordtype">int</span> M, <span class="keywordtype">int</span> N, <span class="keywordtype">int</span> P, <span class="keywordtype">int</span> Q, <span class="keyword">class</span> T&gt;</div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="namespaceyage_1_1matrix.html#a277125ad9fa06a7119c59d350e129985">  399</a></span>&#160;<a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, Q, T&gt;</a> <a class="code" href="namespaceyage_1_1matrix.html#a277125ad9fa06a7119c59d350e129985">multiply</a>(<span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, N, T&gt;</a> &amp;m1, <span class="keyword">const</span> <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;P, Q, T&gt;</a> &amp;m2)</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;{</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordflow">if</span> (N != P) {</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;            <span class="stringliteral">&quot;Matrices don&#39;t have the right dimensions for multiplication&quot;</span>);</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    }</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    <a class="code" href="classyage_1_1Matrix.html">Matrix&lt;M, Q, T&gt;</a> res;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; M; ++i) {</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; Q; ++j) {</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;            res[i][j] = <a class="code" href="namespaceyage_1_1matrix.html#ac4d2f55a5c3369ec42001776a582c30a">dot</a>(<a class="code" href="namespaceyage_1_1matrix.html#a62de4b4b6bab23717d957c370f2e41c7">transpose</a>(m1.<a class="code" href="classyage_1_1Matrix.html#adffb22a99417271958621ff1f51b7f08">getRow</a>(i)), m2.<a class="code" href="classyage_1_1Matrix.html#a2833adcae1e01f637eba251c5aee7888">getCol</a>(j));</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;        }</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    }</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;}</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;} <span class="comment">// namespace matrix</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;} <span class="comment">// namespace yage</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="namespaceyage_html_acca4a23afb94173695bbc1e1f2cde2b3"><div class="ttname"><a href="namespaceyage.html#acca4a23afb94173695bbc1e1f2cde2b3">yage::operator/</a></div><div class="ttdeci">Matrix&lt; M, N, T &gt; operator/(Matrix&lt; M, N, T &gt; lhs, const T &amp;rhs)</div><div class="ttdef"><b>Definition:</b> matrix.h:264</div></div>
<div class="ttc" id="classyage_1_1Vector2_html_ab5e0499a78afced459600a867736a42e"><div class="ttname"><a href="classyage_1_1Vector2.html#ab5e0499a78afced459600a867736a42e">yage::Vector2::y</a></div><div class="ttdeci">const Type &amp; y() const</div><div class="ttdef"><b>Definition:</b> matrix.h:347</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a0851891b2575ca0634d8a4a0696b8346"><div class="ttname"><a href="classyage_1_1Matrix.html#a0851891b2575ca0634d8a4a0696b8346">yage::Matrix::operator[]</a></div><div class="ttdeci">details::Row&lt; Rows, Cols, Type &gt; operator[](int row) const</div><div class="ttdef"><b>Definition:</b> matrix.h:166</div></div>
<div class="ttc" id="classyage_1_1details_1_1Row_html"><div class="ttname"><a href="classyage_1_1details_1_1Row.html">yage::details::Row</a></div><div class="ttdef"><b>Definition:</b> matrix.h:47</div></div>
<div class="ttc" id="namespaceyage_html_ad8903f6a93ac89f16846458540717507"><div class="ttname"><a href="namespaceyage.html#ad8903f6a93ac89f16846458540717507">yage::operator*</a></div><div class="ttdeci">Matrix&lt; M, N, T &gt; operator*(Matrix&lt; M, N, T &gt; lhs, const T &amp;rhs)</div><div class="ttdef"><b>Definition:</b> matrix.h:246</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_acaf0837fade0cb4179603b97ac224965"><div class="ttname"><a href="classyage_1_1Matrix.html#acaf0837fade0cb4179603b97ac224965">yage::Matrix::rowSize</a></div><div class="ttdeci">int rowSize() const</div><div class="ttdoc">Returns the row size of the Matrix. </div><div class="ttdef"><b>Definition:</b> matrix.h:91</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a2753285bcc49a050a49976a6dbc8e89a"><div class="ttname"><a href="classyage_1_1Matrix.html#a2753285bcc49a050a49976a6dbc8e89a">yage::Matrix::colSize</a></div><div class="ttdeci">int colSize() const</div><div class="ttdoc">Returns the column size of the Matrix. </div><div class="ttdef"><b>Definition:</b> matrix.h:94</div></div>
<div class="ttc" id="classyage_1_1Vector2_html"><div class="ttname"><a href="classyage_1_1Vector2.html">yage::Vector2</a></div><div class="ttdoc">2D Vector class. </div><div class="ttdef"><b>Definition:</b> matrix.h:327</div></div>
<div class="ttc" id="namespaceyage_html_a5ddd829cb1c7c4c880d0fd53326858fe"><div class="ttname"><a href="namespaceyage.html#a5ddd829cb1c7c4c880d0fd53326858fe">yage::operator==</a></div><div class="ttdeci">bool operator==(const Matrix&lt; M, N, T &gt; &amp;lhs, const Matrix&lt; M, N, T &gt; &amp;rhs)</div><div class="ttdef"><b>Definition:</b> matrix.h:273</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a20ea5fe16d27ef15f775b5497cadc851"><div class="ttname"><a href="classyage_1_1Matrix.html#a20ea5fe16d27ef15f775b5497cadc851">yage::Matrix::end</a></div><div class="ttdeci">std::vector&lt; Type &gt;::iterator end()</div><div class="ttdoc">Iterator support for the end. </div><div class="ttdef"><b>Definition:</b> matrix.h:134</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a2833adcae1e01f637eba251c5aee7888"><div class="ttname"><a href="classyage_1_1Matrix.html#a2833adcae1e01f637eba251c5aee7888">yage::Matrix::getCol</a></div><div class="ttdeci">Matrix&lt; Rows, 1, Type &gt; getCol(int col) const</div><div class="ttdoc">Get a specific column in a column vector. </div><div class="ttdef"><b>Definition:</b> matrix.h:115</div></div>
<div class="ttc" id="classyage_1_1details_1_1Row_html_a438164456acdb9e20c3e13ef9e43d5b3"><div class="ttname"><a href="classyage_1_1details_1_1Row.html#a438164456acdb9e20c3e13ef9e43d5b3">yage::details::Row::index_</a></div><div class="ttdeci">int index_</div><div class="ttdef"><b>Definition:</b> matrix.h:51</div></div>
<div class="ttc" id="classyage_1_1Vector_html_a81efa1cb9d4ce8bb8c5cf9652a5650a2"><div class="ttname"><a href="classyage_1_1Vector.html#a81efa1cb9d4ce8bb8c5cf9652a5650a2">yage::Vector::operator[]</a></div><div class="ttdeci">Type &amp; operator[](int col)</div><div class="ttdef"><b>Definition:</b> matrix.h:306</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a0ab11922319366f6e74f6e9e7d7abeed"><div class="ttname"><a href="classyage_1_1Matrix.html#a0ab11922319366f6e74f6e9e7d7abeed">yage::Matrix::data_</a></div><div class="ttdeci">std::vector&lt; Type &gt; data_</div><div class="ttdoc">Vector containing the data of the matrix. </div><div class="ttdef"><b>Definition:</b> matrix.h:83</div></div>
<div class="ttc" id="namespaceyage_1_1matrix_html_a277125ad9fa06a7119c59d350e129985"><div class="ttname"><a href="namespaceyage_1_1matrix.html#a277125ad9fa06a7119c59d350e129985">yage::matrix::multiply</a></div><div class="ttdeci">Matrix&lt; M, Q, T &gt; multiply(const Matrix&lt; M, N, T &gt; &amp;m1, const Matrix&lt; P, Q, T &gt; &amp;m2)</div><div class="ttdoc">Multiplies two matrices together. </div><div class="ttdef"><b>Definition:</b> matrix.h:399</div></div>
<div class="ttc" id="classyage_1_1Vector2_html_a554645b415a76af47698985b7757f0c2"><div class="ttname"><a href="classyage_1_1Vector2.html#a554645b415a76af47698985b7757f0c2">yage::Vector2::y</a></div><div class="ttdeci">Type &amp; y()</div><div class="ttdef"><b>Definition:</b> matrix.h:345</div></div>
<div class="ttc" id="classyage_1_1details_1_1Row_html_a917fa3a09ab89fd610634066a40c74c8"><div class="ttname"><a href="classyage_1_1details_1_1Row.html#a917fa3a09ab89fd610634066a40c74c8">yage::details::Row::operator[]</a></div><div class="ttdeci">const Type &amp; operator[](int col) const</div><div class="ttdef"><b>Definition:</b> matrix.h:65</div></div>
<div class="ttc" id="classyage_1_1details_1_1Row_html_a703d4eee36d93b1227ad734bdcf27190"><div class="ttname"><a href="classyage_1_1details_1_1Row.html#a703d4eee36d93b1227ad734bdcf27190">yage::details::Row::operator[]</a></div><div class="ttdeci">Type &amp; operator[](int col)</div><div class="ttdef"><b>Definition:</b> matrix.h:59</div></div>
<div class="ttc" id="classyage_1_1details_1_1Row_html_a9c781b74460f4cb429de8838f74857d8"><div class="ttname"><a href="classyage_1_1details_1_1Row.html#a9c781b74460f4cb429de8838f74857d8">yage::details::Row::parent_</a></div><div class="ttdeci">Matrix&lt; Rows, Cols, Type &gt; * parent_</div><div class="ttdef"><b>Definition:</b> matrix.h:50</div></div>
<div class="ttc" id="namespaceyage_1_1matrix_html_a62de4b4b6bab23717d957c370f2e41c7"><div class="ttname"><a href="namespaceyage_1_1matrix.html#a62de4b4b6bab23717d957c370f2e41c7">yage::matrix::transpose</a></div><div class="ttdeci">Matrix&lt; N, M, T &gt; transpose(const Matrix&lt; M, N, T &gt; &amp;m)</div><div class="ttdoc">Transposes a matrix and returns the result. </div><div class="ttdef"><b>Definition:</b> matrix.h:367</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_acc2d0763f060c923ce53b37143d0a7bb"><div class="ttname"><a href="classyage_1_1Matrix.html#acc2d0763f060c923ce53b37143d0a7bb">yage::Matrix::operator-=</a></div><div class="ttdeci">Matrix&lt; Rows, Cols, Type &gt; &amp; operator-=(const Matrix&lt; Rows, Cols, Type &gt; &amp;rhs)</div><div class="ttdef"><b>Definition:</b> matrix.h:183</div></div>
<div class="ttc" id="classyage_1_1Vector2_html_a5a777413b63e68dc5f797d31e3d7beaf"><div class="ttname"><a href="classyage_1_1Vector2.html#a5a777413b63e68dc5f797d31e3d7beaf">yage::Vector2::x</a></div><div class="ttdeci">Type &amp; x()</div><div class="ttdef"><b>Definition:</b> matrix.h:341</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a89e826d2c6646002cfae23dde7f61145"><div class="ttname"><a href="classyage_1_1Matrix.html#a89e826d2c6646002cfae23dde7f61145">yage::Matrix::operator[]</a></div><div class="ttdeci">details::Row&lt; Rows, Cols, Type &gt; operator[](int row)</div><div class="ttdef"><b>Definition:</b> matrix.h:161</div></div>
<div class="ttc" id="namespaceyage_html_a226cc29763f745fd175844f4263d5dae"><div class="ttname"><a href="namespaceyage.html#a226cc29763f745fd175844f4263d5dae">yage::operator+</a></div><div class="ttdeci">Matrix&lt; M, N, T &gt; operator+(Matrix&lt; M, N, T &gt; lhs, const Matrix&lt; M, N, T &gt; &amp;rhs)</div><div class="ttdef"><b>Definition:</b> matrix.h:196</div></div>
<div class="ttc" id="classyage_1_1Vector_html"><div class="ttname"><a href="classyage_1_1Vector.html">yage::Vector</a></div><div class="ttdef"><b>Definition:</b> matrix.h:292</div></div>
<div class="ttc" id="namespaceyage_html_a2187fb11298a029f2877702192717090"><div class="ttname"><a href="namespaceyage.html#a2187fb11298a029f2877702192717090">yage::operator-</a></div><div class="ttdeci">Matrix&lt; M, N, T &gt; operator-(Matrix&lt; M, N, T &gt; lhs, const Matrix&lt; M, N, T &gt; &amp;rhs)</div><div class="ttdef"><b>Definition:</b> matrix.h:203</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a8b7e0913efdb5e8c9ff39df4c4f36228"><div class="ttname"><a href="classyage_1_1Matrix.html#a8b7e0913efdb5e8c9ff39df4c4f36228">yage::Matrix::operator+=</a></div><div class="ttdeci">Matrix&lt; Rows, Cols, Type &gt; &amp; operator+=(const Matrix&lt; Rows, Cols, Type &gt; &amp;rhs)</div><div class="ttdef"><b>Definition:</b> matrix.h:172</div></div>
<div class="ttc" id="classyage_1_1Matrix_html"><div class="ttname"><a href="classyage_1_1Matrix.html">yage::Matrix</a></div><div class="ttdoc">Base Matrix class used by other similar classes. </div><div class="ttdef"><b>Definition:</b> matrix.h:26</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_aaa7273d046ac077da76ffaec876041d7"><div class="ttname"><a href="classyage_1_1Matrix.html#aaa7273d046ac077da76ffaec876041d7">yage::Matrix::toString</a></div><div class="ttdeci">virtual std::string toString() const</div><div class="ttdoc">Prints out the matrix, but can also be implemented by other classes to print data differently...</div><div class="ttdef"><b>Definition:</b> matrix.h:142</div></div>
<div class="ttc" id="namespaceyage_1_1matrix_html_ac4d2f55a5c3369ec42001776a582c30a"><div class="ttname"><a href="namespaceyage_1_1matrix.html#ac4d2f55a5c3369ec42001776a582c30a">yage::matrix::dot</a></div><div class="ttdeci">T dot(const Matrix&lt; R, 1, T &gt; &amp;m1, const Matrix&lt; R, 1, T &gt; &amp;m2)</div><div class="ttdoc">Returns the dot product between two vectors. </div><div class="ttdef"><b>Definition:</b> matrix.h:383</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_adffb22a99417271958621ff1f51b7f08"><div class="ttname"><a href="classyage_1_1Matrix.html#adffb22a99417271958621ff1f51b7f08">yage::Matrix::getRow</a></div><div class="ttdeci">Matrix&lt; 1, Cols, Type &gt; getRow(int row) const</div><div class="ttdoc">Return the row specified row as a Matrix with only one row. </div><div class="ttdef"><b>Definition:</b> matrix.h:101</div></div>
<div class="ttc" id="classyage_1_1Vector_html_a956f7b6d02c0309adece311f59c8beae"><div class="ttname"><a href="classyage_1_1Vector.html#a956f7b6d02c0309adece311f59c8beae">yage::Vector::toString</a></div><div class="ttdeci">std::string toString() const override</div><div class="ttdoc">Prints out the matrix, but can also be implemented by other classes to print data differently...</div><div class="ttdef"><b>Definition:</b> matrix.h:310</div></div>
<div class="ttc" id="classyage_1_1Vector2_html_a96360148b634862a31573f475b4fa53f"><div class="ttname"><a href="classyage_1_1Vector2.html#a96360148b634862a31573f475b4fa53f">yage::Vector2::x</a></div><div class="ttdeci">const Type &amp; x() const</div><div class="ttdef"><b>Definition:</b> matrix.h:343</div></div>
<div class="ttc" id="namespaceyage_html"><div class="ttname"><a href="namespaceyage.html">yage</a></div><div class="ttdoc">Project namespace. </div><div class="ttdef"><b>Definition:</b> camera2d.cpp:13</div></div>
<div class="ttc" id="classyage_1_1Matrix_html_a83d77d3a40ced5e2b703a6d66b6e6055"><div class="ttname"><a href="classyage_1_1Matrix.html#a83d77d3a40ced5e2b703a6d66b6e6055">yage::Matrix::begin</a></div><div class="ttdeci">std::vector&lt; Type &gt;::iterator begin()</div><div class="ttdoc">Iterator support for the start. </div><div class="ttdef"><b>Definition:</b> matrix.h:128</div></div>
<div class="ttc" id="classyage_1_1Vector_html_a1e9c60516faeb06826666493a7ca307a"><div class="ttname"><a href="classyage_1_1Vector.html#a1e9c60516faeb06826666493a7ca307a">yage::Vector::operator[]</a></div><div class="ttdeci">const Type &amp; operator[](int col) const</div><div class="ttdef"><b>Definition:</b> matrix.h:308</div></div>
</div><!-- fragment --></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="dir_0a5be4b85c8e2c05f7a9f5a803f53125.html">yage</a></li><li class="navelem"><a class="el" href="dir_aa7f86daaaa64c448f636c0e65de2cec.html">math</a></li><li class="navelem"><a class="el" href="matrix_8h.html">matrix.h</a></li>
    <li class="footer">Generated on Tue Sep 26 2017 14:16:32 for YAGE 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>