ALPS Home Libraries License Support People ALPS Web Site

PrevUpHomeNext

Examples

write a scalar to hdf5

alps::hdf5::oarchive ar("data.h5");
ar << alps::make_pvp("/value", 42);

read a scalar from hdf5

alps::hdf5::iarchive ar("data.h5");
int i;
ar >> alps::make_pvp("/value", i);

reading a scalar as string

alps::hdf5::iarchive ar("bela.h5");
std::string s;
ar >> alps::make_pvp("/value", s);

write a std::vector to hdf5

alps::hdf5::oarchive ar("data.h5");
std::vector<double> vec(5, 42);
ar << alps::make_pvp("/path/2/vec", vec);

read a std::vector from hdf5

std::vector<double> vec;
// fill the vector
alps::hdf5::iarchive ar("data.h5");
ar >> alps::make_pvp("/path/2/vec", vec);

write a string to hdf5

std::string str("foobar");
alps::hdf5::oarchive ar("data.h5");
h5ar << alps::make_pvp("/foo/bar", str);

read a string form hdf5

alps::hdf5::iarchive ar("data.h5");
std::string str;
ar >> alps::make_pvp("/foo/bar", s);

write a c-array to hdf5

long *d = new int[17];
// fill the array
alps::hdf5::oarchive ar("data.h5");
ar << alps::make_pvp("/c/array", d, 17);
delete[] d;

read a c-array from hdf5

alps::hdf5::iarchive ar("data.h5");
std::size_t size = ar.extends("/c/array")[0];
long *d = new long[size];
ar >> alps::make_pvp("/c/array", d, size);
delete[] d;

write / read a class to / from hdf5 (if the path inside a class does not start with "/", it is taken as a relative path. e.g d will be saved to "/my/class/value")

class my_class {
	public:
		my_class(double v = 0): d(v) {}
		double get_value() { return d; }
		void serialize(hdf5::iarchive & ar) { ar >> make_pvp("value", d); }
		void serialize(hdf5::oarchive & ar) const { ar << make_pvp("value", d); }
	private:
		double d;
	};
main(...) {
	{
		my_class c(42);
		alps::hdf5::oarchive ar("data.h5");
		ar << alps::make_pvp("/my/class", c);
	}
	{
		my_class c();
		alps::hdf5::iarchive ar("data.h5");
		ar >> alps::make_pvp("/my/class", c);
	}

write / read an custom type to / from hdf5

typedef enum { A = 13, B = 23 } enum_type;
namespace alps {
	namespace hdf5 {
		template <> oarchive & serialize(oarchive & ar, std::string const & p, enum_type const & v) {
			ar << alps::make_pvp(p, int(v));
			return ar;
		}
		template <> iarchive & serialize(iarchive & ar, std::string const & p, enum_type & v) {
			int tmp;
			ar >> alps::make_pvp(p, tmp);
			switch (tmp) {
				case 13: v = A; break;
				case 23: v = B; break;
			}
			return ar;
		}
	}
}
int main() {
	{
		enum_type e = A;
		alps::hdf5::oarchive ar("data.h5");
		ar << alps::make_pvp("/my/enum", e);
	}
	{
		alps::hdf5::iarchive ar("data.h5");
		enum_type e;
		ar >> alps::make_pvp("/my/enum", e);
	}
}

write an attribute to hdf5 (an attributes can only be scalar type or string)

alps::hdf5::oarchive ar("data.h5");
// the parent of an attribute must exist
ar.serialize("/foo");
ar << alps::make_pvp("/foo/@bar", std::string("hello"));

read an attribute from hdf5

alps::hdf5::iarchive ar("data.h5");
std::string s;
ar >> alps::make_pvp("/foo/@bar", s);

Copyright 2009, 2010 Lukas Gamper

PrevUpHomeNext