Skip to content

File stdout_record_logger.hpp

File List > src > stdout_record_logger.hpp

Go to the documentation of this file

#pragma once

#include "illixr/data_format/misc.hpp"
#include "illixr/record_logger.hpp"

#include 
#include 
#include 

namespace ILLIXR {
class [[maybe_unused]] stdout_record_logger : public record_logger {
protected:
    virtual void log(const record& r) override {
        const record_header& rh = r.get_record_header();
        for (unsigned i = 0; i < rh.get_columns(); ++i) {
            std::cout << rh.get_column_name(i) << ',';
            if (false) {
            } else if (rh.get_column_type(i) == typeid(std::size_t)) {
                std::cout << r.get_value<std::size_t>(i);
            } else if (rh.get_column_type(i) == typeid(bool)) {
                std::cout << std::boolalpha << r.get_value<bool>(i);
            } else if (rh.get_column_type(i) == typeid(double)) {
                std::cout << r.get_value<double>(i);
            } else if (rh.get_column_type(i) == typeid(duration)) {
                auto val = r.get_value<duration>(i);
                std::cout << static_cast<long long>(std::chrono::nanoseconds{val}.count());
            } else if (rh.get_column_type(i) == typeid(time_point)) {
                auto val = r.get_value<time_point>(i).time_since_epoch();
                std::cout << static_cast<long long>(std::chrono::nanoseconds{val}.count());
            } else if (rh.get_column_type(i) == typeid(std::chrono::nanoseconds)) {
                auto val = r.get_value<std::chrono::nanoseconds>(i);
                std::cout << static_cast<long long>(std::chrono::nanoseconds{val}.count());
            } else if (rh.get_column_type(i) == typeid(std::chrono::high_resolution_clock::time_point)) {
                auto val = r.get_value<std::chrono::high_resolution_clock::time_point>(i).time_since_epoch();
                std::cout << static_cast<long long>(std::chrono::nanoseconds{val}.count());
            } else if (rh.get_column_type(i) == typeid(std::string)) {
                std::cout << r.get_value<std::string>(i);
            } else {
                std::ostringstream ss;
                ss << "type " << rh.get_column_type(i).name() << " (used in " << rh.get_name() << ") is not implemented.\n";
                throw std::runtime_error{ss.str()};
            }
            std::cout << ',';
        }
        std::cout << '\n';
    }
};
} // namespace ILLIXR