1<?xml version="1.0" encoding="utf-8"?>
2
3<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
4
5  <!-- Fixed x Fixed Matrix -->
6  <Type Name="Eigen::Matrix&lt;*,*,*,*,*,*&gt;">
7      <AlternativeType Name="Eigen::Array&lt;*,-1,-1,*,*,*&gt;"/>
8      <DisplayString>[{$T2}, {$T3}] (fixed matrix)</DisplayString>
9      <Expand>
10        <ArrayItems Condition="Flags%2"> <!-- row major layout -->
11          <Rank>2</Rank>
12          <Size>$i==0 ? $T2 : $T3</Size>
13          <ValuePointer>m_storage.m_data.array</ValuePointer>
14        </ArrayItems>
15        <ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
16          <Direction>Backward</Direction>
17          <Rank>2</Rank>
18          <Size>$i==0 ? $T2 : $T3</Size>
19          <ValuePointer>m_storage.m_data.array</ValuePointer>
20        </ArrayItems>
21      </Expand>
22  </Type>
23
24  <!-- 2 x 2 Matrix -->
25  <Type Name="Eigen::Matrix&lt;*,2,2,*,*,*&gt;">
26      <AlternativeType Name="Eigen::Array&lt;*,2,2,*,*,*&gt;"/>
27      <DisplayString>[2, 2] (fixed matrix)</DisplayString>
28      <Expand>
29        <Synthetic Name="[row 0]" Condition="Flags%2">
30          <DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]})</DisplayString>
31        </Synthetic>
32        <Synthetic Name="[row 0]" Condition="!(Flags%2)">
33          <DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[2]})</DisplayString>
34        </Synthetic>
35        <Synthetic Name="[row 1]" Condition="Flags%2">
36          <DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
37        </Synthetic>
38        <Synthetic Name="[row 1]" Condition="!(Flags%2)">
39          <DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[3]})</DisplayString>
40        </Synthetic>
41      </Expand>
42  </Type>
43
44  <!-- 3 x 3 Matrix -->
45  <Type Name="Eigen::Matrix&lt;*,3,3,*,*,*&gt;">
46      <AlternativeType Name="Eigen::Array&lt;*,3,3,*,*,*&gt;"/>
47      <DisplayString>[3, 3] (fixed matrix)</DisplayString>
48      <Expand>
49        <Synthetic Name="[row 0]" Condition="Flags%2">
50          <DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]})</DisplayString>
51        </Synthetic>
52        <Synthetic Name="[row 0]" Condition="!(Flags%2)">
53          <DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[3]}, {m_storage.m_data.array[6]})</DisplayString>
54        </Synthetic>
55        <Synthetic Name="[row 1]" Condition="Flags%2">
56          <DisplayString>({m_storage.m_data.array[3]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[5]})</DisplayString>
57        </Synthetic>
58        <Synthetic Name="[row 1]" Condition="!(Flags%2)">
59          <DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[7]})</DisplayString>
60        </Synthetic>
61        <Synthetic Name="[row 2]" Condition="Flags%2">
62          <DisplayString>({m_storage.m_data.array[6]}, {m_storage.m_data.array[7]}, {m_storage.m_data.array[8]})</DisplayString>
63        </Synthetic>
64        <Synthetic Name="[row 2]" Condition="!(Flags%2)">
65          <DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[8]})</DisplayString>
66        </Synthetic>
67      </Expand>
68  </Type>
69
70  <!-- 4 x 4 Matrix -->
71  <Type Name="Eigen::Matrix&lt;*,4,4,*,*,*&gt;">
72      <AlternativeType Name="Eigen::Array&lt;*,4,4,*,*,*&gt;"/>
73      <DisplayString>[4, 4] (fixed matrix)</DisplayString>
74      <Expand>
75        <Synthetic Name="[row 0]" Condition="Flags%2">
76          <DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
77        </Synthetic>
78        <Synthetic Name="[row 0]" Condition="!(Flags%2)">
79          <DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[8]}, {m_storage.m_data.array[12]})</DisplayString>
80        </Synthetic>
81        <Synthetic Name="[row 1]" Condition="Flags%2">
82          <DisplayString>({m_storage.m_data.array[4]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[6]}, {m_storage.m_data.array[7]})</DisplayString>
83        </Synthetic>
84        <Synthetic Name="[row 1]" Condition="!(Flags%2)">
85          <DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[9]}, {m_storage.m_data.array[13]})</DisplayString>
86        </Synthetic>
87        <Synthetic Name="[row 2]" Condition="Flags%2">
88          <DisplayString>({m_storage.m_data.array[8]}, {m_storage.m_data.array[9]}, {m_storage.m_data.array[10]}, {m_storage.m_data.array[11]})</DisplayString>
89        </Synthetic>
90        <Synthetic Name="[row 2]" Condition="!(Flags%2)">
91          <DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[6]}, {m_storage.m_data.array[10]}, {m_storage.m_data.array[14]})</DisplayString>
92        </Synthetic>
93        <Synthetic Name="[row 3]" Condition="Flags%2">
94          <DisplayString>({m_storage.m_data.array[12]}, {m_storage.m_data.array[13]}, {m_storage.m_data.array[14]}, {m_storage.m_data.array[15]})</DisplayString>
95        </Synthetic>
96        <Synthetic Name="[row 3]" Condition="!(Flags%2)">
97          <DisplayString>({m_storage.m_data.array[3]}, {m_storage.m_data.array[7]}, {m_storage.m_data.array[11]}, {m_storage.m_data.array[15]})</DisplayString>
98        </Synthetic>
99      </Expand>
100  </Type>
101
102  <!-- Dynamic x Dynamic Matrix -->
103  <Type Name="Eigen::Matrix&lt;*,-1,-1,*,*,*&gt;">
104      <AlternativeType Name="Eigen::Array&lt;*,-1,-1,*,*,*&gt;"/>
105      <DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
106      <DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}, {m_storage.m_cols}] (dynamic matrix)</DisplayString>
107      <Expand>
108        <ArrayItems Condition="Flags%2"> <!-- row major layout -->
109          <Rank>2</Rank>
110          <Size>$i==0 ? m_storage.m_rows : m_storage.m_cols</Size>
111          <ValuePointer>m_storage.m_data</ValuePointer>
112        </ArrayItems>
113        <ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
114          <Direction>Backward</Direction>
115          <Rank>2</Rank>
116          <Size>$i==0 ? m_storage.m_rows : m_storage.m_cols</Size>
117          <ValuePointer>m_storage.m_data</ValuePointer>
118        </ArrayItems>
119      </Expand>
120  </Type>
121
122  <!-- Fixed x Dynamic Matrix -->
123  <Type Name="Eigen::Matrix&lt;*,*,-1,*,*,*&gt;">
124      <AlternativeType Name="Eigen::Array&lt;*,*,-1,*,*,*&gt;"/>
125      <DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
126      <DisplayString Condition="m_storage.m_data != 0">[{$T2}, {m_storage.m_cols}] (dynamic column matrix)</DisplayString>
127      <Expand>
128        <ArrayItems Condition="Flags%2"> <!-- row major layout -->
129          <Rank>2</Rank>
130          <Size>$i==0 ? $T2 : m_storage.m_cols</Size>
131          <ValuePointer>m_storage.m_data</ValuePointer>
132        </ArrayItems>
133        <ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
134          <Direction>Backward</Direction>
135          <Rank>2</Rank>
136          <Size>$i==0 ? $T2 : m_storage.m_cols</Size>
137          <ValuePointer>m_storage.m_data</ValuePointer>
138        </ArrayItems>
139      </Expand>
140  </Type>
141
142  <!-- Dynamic x Fixed Matrix -->
143  <Type Name="Eigen::Matrix&lt;*,-1,*,*,*,*&gt;">
144      <AlternativeType Name="Eigen::Array&lt;*,-1,*,*,*,*&gt;"/>
145      <DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
146      <DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}, {$T2}] (dynamic row matrix)</DisplayString>
147      <Expand>
148        <ArrayItems Condition="Flags%2"> <!-- row major layout -->
149          <Rank>2</Rank>
150          <Size>$i==0 ? m_storage.m_rows : $T2</Size>
151          <ValuePointer>m_storage.m_data</ValuePointer>
152        </ArrayItems>
153        <ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
154          <Direction>Backward</Direction>
155          <Rank>2</Rank>
156          <Size>$i==0 ? m_storage.m_rows : $T2</Size>
157          <ValuePointer>m_storage.m_data</ValuePointer>
158        </ArrayItems>
159      </Expand>
160  </Type>
161
162  <!-- Dynamic Column Vector -->
163  <Type Name="Eigen::Matrix&lt;*,1,-1,*,*,*&gt;">
164      <AlternativeType Name="Eigen::Array&lt;*,1,-1,*,*,*&gt;"/>
165      <DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
166      <DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_cols}] (dynamic column vector)</DisplayString>
167      <Expand>
168        <Item Name="[size]">m_storage.m_cols</Item>
169        <ArrayItems>
170          <Size>m_storage.m_cols</Size>
171          <ValuePointer>m_storage.m_data</ValuePointer>
172        </ArrayItems>
173      </Expand>
174  </Type>
175
176  <!-- Dynamic Row Vector -->
177  <Type Name="Eigen::Matrix&lt;*,-1,1,*,*,*&gt;">
178      <AlternativeType Name="Eigen::Array&lt;*,-1,1,*,*,*&gt;"/>
179      <DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
180      <DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}] (dynamic row vector)</DisplayString>
181      <Expand>
182        <Item Name="[size]">m_storage.m_rows</Item>
183        <ArrayItems>
184          <Size>m_storage.m_rows</Size>
185          <ValuePointer>m_storage.m_data</ValuePointer>
186        </ArrayItems>
187      </Expand>
188  </Type>
189
190  <!-- Fixed Vector -->
191  <Type Name="Eigen::Matrix&lt;*,1,1,*,*,*&gt;">
192      <AlternativeType Name="Eigen::Array&lt;*,1,1,*,*,*&gt;"/>
193      <DisplayString>[1] ({m_storage.m_data.array[0]})</DisplayString>
194      <Expand>
195        <Item Name="[x]">m_storage.m_data.array[0]</Item>
196      </Expand>
197  </Type>
198
199  <Type Name="Eigen::Matrix&lt;*,2,1,*,*,*&gt;">
200      <AlternativeType Name="Eigen::Matrix&lt;*,1,2,*,*,*&gt;"/>
201      <AlternativeType Name="Eigen::Array&lt;*,2,1,*,*,*&gt;"/>
202      <AlternativeType Name="Eigen::Array&lt;*,1,2,*,*,*&gt;"/>
203      <DisplayString>[2] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]})</DisplayString>
204      <Expand>
205        <Item Name="[x]">m_storage.m_data.array[0]</Item>
206        <Item Name="[y]">m_storage.m_data.array[1]</Item>
207      </Expand>
208  </Type>
209
210  <Type Name="Eigen::Matrix&lt;*,3,1,*,*,*&gt;">
211      <AlternativeType Name="Eigen::Matrix&lt;*,1,3,*,*,*&gt;"/>
212      <AlternativeType Name="Eigen::Array&lt;*,3,1,*,*,*&gt;"/>
213      <AlternativeType Name="Eigen::Array&lt;*,1,3,*,*,*&gt;"/>
214      <DisplayString>[3] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]})</DisplayString>
215      <Expand>
216        <Item Name="[x]">m_storage.m_data.array[0]</Item>
217        <Item Name="[y]">m_storage.m_data.array[1]</Item>
218        <Item Name="[z]">m_storage.m_data.array[2]</Item>
219      </Expand>
220  </Type>
221
222    <Type Name="Eigen::Matrix&lt;*,4,1,*,*,*&gt;">
223      <AlternativeType Name="Eigen::Matrix&lt;*,1,4,*,*,*&gt;"/>
224      <AlternativeType Name="Eigen::Array&lt;*,4,1,*,*,*&gt;"/>
225      <AlternativeType Name="Eigen::Array&lt;*,1,4,*,*,*&gt;"/>
226      <DisplayString>[4] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
227      <Expand>
228        <Item Name="[x]">m_storage.m_data.array[0]</Item>
229        <Item Name="[y]">m_storage.m_data.array[1]</Item>
230        <Item Name="[z]">m_storage.m_data.array[2]</Item>
231        <Item Name="[w]">m_storage.m_data.array[3]</Item>
232      </Expand>
233  </Type>
234
235</AutoVisualizer>
236