#pragma once #include "main-settings.hpp" #include "opentrack-compat/options.hpp" #include #include #include #include class OPENTRACK_LOGIC_EXPORT TrackLogger { public: TrackLogger() { } static mem make() { return std::make_shared(); } virtual void write(const char *) { } virtual void write(const double *, int n) { } virtual void next_line() { } void write_pose(const double *p) { write(p, 6); } }; class OPENTRACK_LOGIC_EXPORT TrackLoggerCSV : public TrackLogger { std::ofstream out; bool first_col; inline void handle_first_col_sep(); public: TrackLoggerCSV(const QString &filename) : TrackLogger(), first_col(true) { out.open(filename.toStdString()); if (!out.is_open()) throw std::ios_base::failure("unable to open file"); } static mem make(const main_settings &s) { return std::static_pointer_cast(std::make_shared(s.tracklogging_filename)); } virtual void write(const char *s); virtual void write(const double *p, int n); virtual void next_line(); };