#include "BFileW.h" #include "NEMO.h" #include "tindexes.h" #if !defined(M__ODM) #define M__ODM using michlib::BFileW; using michlib::errmessage; using michlib::GPL; using michlib::message; using michlib::SList; using DataVariants = std::variant; using CLArgs = std::map; class Data: public DataVariants { template static bool WriteData(BFileW& fw, const D& data) { for(size_t i = 0; i < data.N(); i++) { fw.Write(data.Lon(i)); fw.Write(data.Lat(i)); fw.Write(data(i) == data.Fillval() ? NAN : data(i)); } return true; } public: Data() = default; Data(DataVariants&& d): DataVariants(std::move(d)) {} auto Time(size_t it) const { return std::visit( [it = it](const auto& arg) -> auto{ return arg.Time(it); }, *this); } auto NTimes() const { return std::visit( [](const auto& arg) -> auto{ return arg.NTimes(); }, *this); } bool Write(BFileW& fw, VarType vt, const std::vector& tindexes) const { return std::visit( [&fw = fw, vt = vt, &ti = tindexes](const auto& d) -> bool { using T = std::decay_t; return std::visit( [&fw = fw, &ti = ti, &d = d](auto v) -> bool { constexpr auto cvt = decltype(v)::vt; if constexpr(isDataSupported) return WriteData(fw, d.template Read(ti)); else return false; }, vt); }, *this); } }; CLArgs ParseArgs(int argc, char** argv); #endif