This is an old revision of the document!
The blocks in the control system are connected among each other with the aid of signals. As described in Signals they carry a timestamp and a value. The value could be a simple type such as an integer or float. Quite often it will consist of a vector or a matrix. A three dimensional vector of type
double can be declared and initialized as follows:
Vector<3, double> v; v << 1.5, -2, 0;
The declaration could be simplified to
Vector3<> v; v << 1.5, -2, 0;
Vector3 is a predefined type with three dimensions and the default element type is
double. A matrix of 3 times 3 with element type
int could be defined as
Matrix<3, 3, int> m; m << 1, 4, 7, 2, 5, 8, 3, 6, 9;
The first three numbers will be filled into the first colon. While the internal representation is simply a one dimensional vector, the matrix could be visualized as
You can access rows, columns or single elements of matrices with the following methods:
m.get(0,0); // returns element, 1 m.getRow(1); // returns row, [2,5,8] m.getCol(0); // returns column, [1,2,3]' m.getSubMatrix<2,2>(0,1); // returns matrix [[4,5][7,8]]
Single elements, rows or columns can be written with the methods set(), setRow(), or setCol().
The operators () and  work as well as can be seen by the following example
m(3); // returns element or sets element with index 3 m; // returns element or sets element with index 3 m(2,1); // returns element or sets element with index 7 m[2,1]; // does not work, as the  operator cannot be defined for two parameters
A matrix can be logged simply by writing
log.info() << m;
With the 3 x 3 matrix from above we would get
2021-09-16 17:36:53:929 E: [ [1 4 7]' [2 5 8]' [3 6 9]' ]
The matrix is plotted colon per colon.