All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Vector Serialization
Previous: Matrix/Matrix Multiplication     Next: Matrix Serialization


Sometimes it is necessary to store vector and/or matrices on disk, for instance for storing results or for sharing specific setups with other people. The Blaze math serialization module provides the according functionality to create platform independent, portable, binary representations of vectors and matrices that can be used to store the Blaze data structures without loss of precision and to reliably transfer them from one machine to another.

The following example demonstrates the (de-)serialization of dense and sparse vectors:

// Serialization of both vectors
{
// ... Resizing and initialization
// Creating an archive that writes into a the file "vectors.blaze"
blaze::Archive<std::ofstream> archive( "vectors.blaze" );
// Serialization of both vectors into the same archive. Note that d lies before s!
archive << d << s;
}
// Reconstitution of both vectors
{
// Creating an archive that reads from the file "vectors.blaze"
blaze::Archive<std::ofstream> archive( "vectors.blaze" );
// Reconstituting the former d vector into d1. Note that it is possible to reconstitute
// the vector into a differrent kind of vector (StaticVector -> DynamicVector), but that
// the type of elements has to be the same.
archive >> d1;
// Reconstituting the former s vector into d2. Note that is is even possible to reconstitute
// a sparse vector as a dense vector (also the reverse is possible) and that a column vector
// can be reconstituted as row vector (and vice versa). Note however that also in this case
// the type of elements is the same!
archive >> d2
}

The (de-)serialization of vectors is not restricted to vectors of built-in data type, but can also be used for vectors with vector or matrix element type:

// Serialization
{
// ... Resizing and initialization
// Creating an archive that writes into a the file "vector.blaze"
blaze::Archive<std::ofstream> archive( "vector.blaze" );
// Serialization of the vector into the archive
archive << vec;
}
// Deserialization
{
// Creating an archive that reads from the file "vector.blaze"
blaze::Archive<std::ofstream> archive( "vector.blaze" );
// Reconstitution of the vector from the archive
archive >> vec;
}

As the examples demonstrates, the vector serialization offers an enormous flexibility. However, several actions result in errors:

In case an error is encountered during (de-)serialization, a std::runtime_exception is thrown.


Previous: Matrix/Matrix Multiplication     Next: Matrix Serialization