Browse Source

Changed the way unused variables are handled

master
Michael Uleysky 2 weeks ago
parent
commit
5d09c03d00
  1. 9
      actions/actiontsc.h
  2. 5
      include/Adapter.h
  3. 4
      include/ncfilew.h
  4. 3
      src/ncfilew.cpp

9
actions/actiontsc.h

@ -65,9 +65,6 @@ MString ActionTSC_DoAction(const CLArgs& args, D& ds)
}
}
// Delete unused variables
ad.CleanVariables(vars);
pars.SetParameter("variables", varstring);
NCFileW ncfw;
@ -75,7 +72,7 @@ MString ActionTSC_DoAction(const CLArgs& args, D& ds)
{
decltype(pars) emptypars;
const auto& upars = obfuscate ? emptypars : pars;
auto ret = ncfw.Create(name, ad, upars, compress);
auto ret = ncfw.Create(name, ad, vars, upars, compress);
if(!ret) return "Can't create file " + name;
}
@ -85,14 +82,14 @@ MString ActionTSC_DoAction(const CLArgs& args, D& ds)
{
michlib::message(ad.Times()[ind[it]].ToTString());
for(const auto& v: ad.Vars())
if(ad.Is2D(v.first))
if(vars.contains(v.first) && ad.Is2D(v.first))
{
auto data = ad.Read2D(v.first, ind[it]);
if(!data) return "Can't read data";
auto ret = ncfw.WriteVariable(v.first, *data.Value(), it);
if(!ret) return "Can't write data";
}
else
else if(vars.contains(v.first) && ad.Is3D(v.first))
{
auto data = ad.Read3D(v.first, ind[it]);
if(!data) return "Can't read data";

5
include/Adapter.h

@ -113,11 +113,6 @@ class Adapter
return true;
}
void CleanVariables(const std::set<MString>& keep)
{
std::erase_if(vars, [&keep](const auto& k) { return !keep.contains(k.first); });
}
const auto& Times() const { return times; }
const auto& TimeIndexes() const { return tindexes; }
const auto& Vars() const { return vars; }

4
include/ncfilew.h

@ -389,10 +389,10 @@ class NCFileW: public NCFileWBase
michlib::Error AddTimeData(const std::vector<MDateTime>& times);
michlib::Error Create(const MString& name, const Adapter& ad, const michlib_internal::ParameterListEx& pars, int compression);
michlib::Error Create(const MString& name, const Adapter& ad, const std::set<MString>& vars, const michlib_internal::ParameterListEx& pars, int compression);
template<class D>
requires (std::is_same_v<D, Data2D> || std::is_same_v<D, Data3D>)
requires(std::is_same_v<D, Data2D> || std::is_same_v<D, Data3D>)
michlib::Error WriteVariable(const MString& name, const D& data, size_t it);
template<class D> MString Create(const D& data, const MString& name, int compression)

3
src/ncfilew.cpp

@ -184,7 +184,7 @@ michlib::Error NCFileW::AddTimeData(const std::vector<MDateTime>& times)
return {};
}
michlib::Error NCFileW::Create(const MString& name, const Adapter& ad, const michlib_internal::ParameterListEx& pars, int compression)
michlib::Error NCFileW::Create(const MString& name, const Adapter& ad, const std::set<MString>& vars, const michlib_internal::ParameterListEx& pars, int compression)
{
static const MString pref = "NCFileW::Create";
if(Ok()) return {pref, "File already opened"};
@ -211,6 +211,7 @@ michlib::Error NCFileW::Create(const MString& name, const Adapter& ad, const mic
for(const auto& v: ad.Vars())
{
if(!vars.contains(v.first)) continue;
bool is2D = v.second.Read2D ? true : false;
bool is3D = v.second.Read3D ? true : false;

Loading…
Cancel
Save