| 1 | /* | 
|---|
| 2 | * writeTable.hpp | 
|---|
| 3 | * | 
|---|
| 4 | *  Created on: Aug 3, 2012 | 
|---|
| 5 | *      Author: heber | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef WRITETABLE_HPP_ | 
|---|
| 9 | #define WRITETABLE_HPP_ | 
|---|
| 10 |  | 
|---|
| 11 |  | 
|---|
| 12 | // include config.h | 
|---|
| 13 | #ifdef HAVE_CONFIG_H | 
|---|
| 14 | #include <config.h> | 
|---|
| 15 | #endif | 
|---|
| 16 |  | 
|---|
| 17 | #include <boost/mpl/for_each.hpp> | 
|---|
| 18 |  | 
|---|
| 19 | #include <string> | 
|---|
| 20 | #include <sstream> | 
|---|
| 21 | #include <vector> | 
|---|
| 22 |  | 
|---|
| 23 | #include "Fragmentation/Summation/HeaderPrinter.hpp" | 
|---|
| 24 | #include "Fragmentation/Summation/ValuePrinter.hpp" | 
|---|
| 25 |  | 
|---|
| 26 | /** Templated functor to write from a given vector of summed up results the | 
|---|
| 27 | * table with decent header line. | 
|---|
| 28 | * | 
|---|
| 29 | * @param results vector of results of MapType | 
|---|
| 30 | * @param MaxLevel print values up till this level | 
|---|
| 31 | * @return string of the resulting table | 
|---|
| 32 | */ | 
|---|
| 33 | template <typename MapType, typename VectorType, int numprecision=10> | 
|---|
| 34 | struct writeTable{ | 
|---|
| 35 | std::string operator()(const std::vector<MapType> &results, const size_t MaxLevel, const size_t StartLevel=1) | 
|---|
| 36 | { | 
|---|
| 37 | std::stringstream resultstream; | 
|---|
| 38 |  | 
|---|
| 39 | /// create header line for energy | 
|---|
| 40 | resultstream << "level"; | 
|---|
| 41 | HeaderPrinter header; | 
|---|
| 42 | boost::mpl::for_each<VectorType>(boost::ref(header)); | 
|---|
| 43 | resultstream << header.get() << std::endl; | 
|---|
| 44 |  | 
|---|
| 45 | /// print values per line | 
|---|
| 46 | if (MaxLevel >= StartLevel) { | 
|---|
| 47 | ASSERT( results.size() >= (MaxLevel-StartLevel), | 
|---|
| 48 | "writeTable<M,V>() - results has insufficient size."); | 
|---|
| 49 | for (size_t level = StartLevel; level <= MaxLevel; ++level) { | 
|---|
| 50 | resultstream << level; | 
|---|
| 51 | ValuePrinter<MapType, numprecision> values(results[level-1]); | 
|---|
| 52 | boost::mpl::for_each<VectorType>(boost::ref(values)); | 
|---|
| 53 | resultstream << values.get() << std::endl; | 
|---|
| 54 | } | 
|---|
| 55 | } else { | 
|---|
| 56 | ELOG(2, "writeTable does not output as MaxLevel(" << MaxLevel | 
|---|
| 57 | << ") < StartLevel(" << StartLevel << "."); | 
|---|
| 58 | } | 
|---|
| 59 | return resultstream.str(); | 
|---|
| 60 | } | 
|---|
| 61 | }; | 
|---|
| 62 |  | 
|---|
| 63 |  | 
|---|
| 64 | #endif /* WRITETABLE_HPP_ */ | 
|---|