RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits > Class Template Reference

The RandomSetter is a wrapper object allowing to set/update a sparse matrix with random access. More...

#include <RandomSetter.h>

List of all members.

Classes

struct  ScalarWrapper

Public Member Functions

int nonZeros () const
Scalaroperator() (int row, int col)
 RandomSetter (SparseMatrixType &target)
 ~RandomSetter ()

Protected Attributes

HashMapTypem_hashmaps
unsigned char m_keyBitsOffset
int m_outerPackets
SparseMatrixType * mp_target

Private Types

enum  {
  SwapStorage = 1 - MapTraits<ScalarWrapper>::IsSorted, TargetRowMajor = (SparseMatrixType::Flags & RowMajorBit) ? 1 : 0, SetterRowMajor = SwapStorage ? 1-TargetRowMajor : TargetRowMajor, IsUpperTriangular = SparseMatrixType::Flags & UpperTriangularBit,
  IsLowerTriangular = SparseMatrixType::Flags & LowerTriangularBit
}
typedef MapTraits
< ScalarWrapper >::Type 
HashMapType
typedef MapTraits
< ScalarWrapper >::KeyType 
KeyType
typedef ei_traits
< SparseMatrixType >::Scalar 
Scalar

Static Private Attributes

static const int OuterPacketMask = (1 << OuterPacketBits) - 1

Detailed Description

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
class RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >

The RandomSetter is a wrapper object allowing to set/update a sparse matrix with random access.

Parameters:
SparseMatrixType the type of the sparse matrix we are updating
MapTraits a traits class representing the map implementation used for the temporary sparse storage. Its default value depends on the system.
OuterPacketBits defines the number of rows (or columns) manage by a single map object as a power of two exponent.

This class temporarily represents a sparse matrix object using a generic map implementation allowing for efficient random access. The conversion from the compressed representation to a hash_map object is performed in the RandomSetter constructor, while the sparse matrix is updated back at destruction time. This strategy suggest the use of nested blocks as in this example:

 SparseMatrix<double> m(rows,cols);
 {
   RandomSetter<SparseMatrix<double> > w(m);
   // don't use m but w instead with read/write random access to the coefficients:
   for(;;)
     w(rand(),rand()) = rand;
 }
 // when w is deleted, the data are copied back to m
 // and m is ready to use.

Since hash_map objects are not fully sorted, representing a full matrix as a single hash_map would involve a big and costly sort to update the compressed matrix back. To overcome this issue, a RandomSetter use multiple hash_map, each representing 2^OuterPacketBits columns or rows according to the storage order. To reach optimal performance, this value should be adjusted according to the average number of nonzeros per rows/columns.

The possible values for the template parameter MapTraits are:

The default map implementation depends on the availability, and the preferred order is: GoogleSparseHashMapTraits, GnuHashMapTraits, and finally StdMapTraits.

For performance and memory consumption reasons it is highly recommended to use one of the Google's hash_map implementation. To enable the support for them, you have two options:

See also:
http://code.google.com/p/google-sparsehash/

Definition at line 167 of file RandomSetter.h.


Member Typedef Documentation

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
typedef MapTraits<ScalarWrapper>::Type RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::HashMapType [private]

Definition at line 176 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
typedef MapTraits<ScalarWrapper>::KeyType RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::KeyType [private]

Definition at line 175 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
typedef ei_traits<SparseMatrixType>::Scalar RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::Scalar [private]

Definition at line 169 of file RandomSetter.h.


Member Enumeration Documentation

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
anonymous enum [private]
Enumerator:
SwapStorage 
TargetRowMajor 
SetterRowMajor 
IsUpperTriangular 
IsLowerTriangular 

Definition at line 178 of file RandomSetter.h.


Constructor & Destructor Documentation

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::RandomSetter ( SparseMatrixType &  target  )  [inline]

Constructs a random setter object from the sparse matrix target

Note that the initial value of target are imported. If you want to re-set a sparse matrix from scratch, then you must set it to zero first using the setZero() function.

Definition at line 194 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::~RandomSetter (  )  [inline]

Destructor updating back the sparse matrix target

Definition at line 222 of file RandomSetter.h.


Member Function Documentation

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
int RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::nonZeros (  )  const [inline]
Returns:
the number of non zero coefficients
Note:
According to the underlying map/hash_map implementation, this function might be quite expensive.

Definition at line 313 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
Scalar& RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::operator() ( int  row,
int  col 
) [inline]
Returns:
a reference to the coefficient at given coordinates row, col

Definition at line 296 of file RandomSetter.h.


Member Data Documentation

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
HashMapType* RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::m_hashmaps [protected]

Definition at line 324 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
unsigned char RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::m_keyBitsOffset [protected]

Definition at line 327 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
int RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::m_outerPackets [protected]

Definition at line 326 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
SparseMatrixType* RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::mp_target [protected]

Definition at line 325 of file RandomSetter.h.

template<typename SparseMatrixType, template< typename T > class MapTraits = StdMapTraits, int OuterPacketBits = 6>
const int RandomSetter< SparseMatrixType, MapTraits, OuterPacketBits >::OuterPacketMask = (1 << OuterPacketBits) - 1 [static, private]

Definition at line 177 of file RandomSetter.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines


vcglib
Author(s): Christian Bersch
autogenerated on Fri Jan 11 09:22:20 2013