// -*- mode: c++; mode: visual-line; mode: flyspell; fill-column: 100000 -*- /*************************************************************************** * doc/tutorial_matrix.dox * * Usage Tutorial for STXXL * * Part of the STXXL. See http://stxxl.sourceforge.net * * Copyright (C) 2013 Daniel Feist <daniel.feist@student.kit.edu> * * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) **************************************************************************/ namespace stxxl { /** \page tutorial_matrix STXXL Matrix This section introduces into the STXXL matrix container (to learn more about the structure of stxxl::matrix, see section \ref design_matrix). ### Create a STXXL Matrix Before using a STXXL matrix, we initially have to define and then to instantiate a matrix object. Two template parameters are required to define a stxxl::matrix container. ValueType defines the type of the contained objects (must be a POD with no references to internal memory) and BlockSizeLength specifies the side length of the square submatrices (blocks). BlockSizeLength is given in bits and must be a multiple of k assuming a valueType of k bits. The block schedular is used for swapping of blocks and provide blocks for temporary storage and expects the type of swappable_blocks to manage as a parameter. Can be some specialized subclass. We used matrix_swappable_block as a subclass which holds the same template parameters as the aforementioned stxxl::matrix container. \code // Define integer matrix // template paramter <ValueType, BlockSideLength> typedef stxxl::block_scheduler<stxxl::matrix_swappable_block<int, 32> > block_schedular_type; // template paramter <ValueType, BlockSideLength> typedef stxxl::matrix<int, 32> matrix_type; // construct block schedular object which uses 64 MiB internal memory for caching block_schedular_type my_bs(64*1024*1024); \endcode Instanciate three new height x width (3 x 3 in this example) matrices A, B and C using a block schedular. \n Note that all values are initially set to zero. \code int height = 3; int width = 3; matrix_type A(my_bs, height, width); // creates a new matrix A of given dimensions. Elements' values are set to zero. matrix_type B(my_bs, height, width); // B matrix_type C(my_bs, height, width); // C \endcode ### Insert / Access elements To insert and access elements, the STXXL matrix container intends different iterators. Iterate for example row-by-row beginning with the top row can be done with the row_major_iterator. The operator * accesses a single element the iterator points to just now. \code typedef matrix_type::row_major_iterator row_iterator; // let it_A point to the first element of matrix A and advance till the very last element of matrix A is reached for (row_iterator it_A = A.begin(); it_A != A.end(); ++it_A) { *it_A = 1; // set current matrix element to 1 } \endcode ### Determine size of matrix To detect the height and width of a given matrix C, we can call: \code std::cout << "height: " << C.get_height() << " - " << "width: " << C.get_width() << std::endl; \endcode ### Matrix Operations The STXXL Matrix container provides the following arithmetic operations: - Addition, Substraction and Multiplication of two matrices A and B. \code C = A + B; C = A - B; C = A * B; \endcode - Transposition and Zeroing of a matrix C. \code C.transpose(); C.set_zero(); \endcode ### A minimal working example of STXXL's Matrix (See \ref examples/containers/matrix1.cpp for the sourcecode of the following example). \snippet examples/containers/matrix1.cpp example \example examples/containers/matrix1.cpp This example code is explained in the \ref tutorial_matrix section */ } // namespace stxxl