diff --git a/pub/lib/import.cpp b/pub/lib/import.cpp index 921a052ff347e88ef28ef7f3cf533eb1ace4ebb0..aebe61b6114f801d3d9b6a933695650d2eea0a97 100644 --- a/pub/lib/import.cpp +++ b/pub/lib/import.cpp @@ -141,7 +141,7 @@ void NImport::read_tab(string qualif) } if (!horizontal) { s = PSpec(new CSpec); - s->z.resize(nz); + s->z.resize(nzdat); for (int iz = 0; iz < nzdat; ++iz) s->z[iz] = RObjDbl(new CObjDbl(zdat[iz])); } diff --git a/pub/lib/node.cpp b/pub/lib/node.cpp index 99b45e78bf1bd4af24f2201def28c9ee5207aa73..4ae82b0777366807404ef8752d244d237233c6a1 100644 --- a/pub/lib/node.cpp +++ b/pub/lib/node.cpp @@ -523,8 +523,7 @@ RObj CNodeGeni::tree_val(const CContext& ctx) const if (ctx.dim == CContext::_1) return val; else if (ctx.dim == CContext::_VI) - throw "TODO: implement to_vec"; - // return val.to_vec(ctx.nv); + return val->to_vec(ctx.nv); else throw "BUG: unforeseen dimension {context: " + ctx.context_info() + "}"; diff --git a/pub/lib/obj.cpp b/pub/lib/obj.cpp index 63d107d6989800f49d8b8da57af065fe58b7cd30..8849ff28ec9274a04deaf2086e5b1415a7d4bfa6 100644 --- a/pub/lib/obj.cpp +++ b/pub/lib/obj.cpp @@ -40,6 +40,10 @@ string CObjInt::to_s(int maxlen, int minlen, int prec) const return ret; } +RObjVecNum CObjInt::to_vec(int repetitions) const +{ + return RObjVecInt(new CObjVecInt(vector<int>(repetitions, val))); +} //************************************************************************************************** // CObjDbl @@ -65,6 +69,11 @@ string CObjDbl::result_info() const return "CObjDbl(" + to_s() + ")"; } +RObjVecNum CObjDbl::to_vec(int repetitions) const +{ + return RObjVecDbl(new CObjVecDbl(vector<double>(repetitions, val))); +} + //************************************************************************************************** // CObjEnu @@ -84,6 +93,12 @@ string CObjEnu::result_info() const return "CObjDbl(" + to_s() + ")"; } +RObjVecNum CObjEnu::to_vec(int repetitions) const +{ + return RObjVecEnu(new CObjVecEnu(vector<double>(repetitions, val), + vector<double>(repetitions, err))); +} + //************************************************************************************************** // CObjVec diff --git a/pub/lib/obj.hpp b/pub/lib/obj.hpp index 756f4295ae7e420159db1ca45baca55a06f6b037..7a049a563ae37719aaf21f76c13e339e5ce3acd5 100644 --- a/pub/lib/obj.hpp +++ b/pub/lib/obj.hpp @@ -50,7 +50,7 @@ public: bool is_vec() const { return false; } virtual double to_dr() const { return 0.; } virtual double to_dr(int i) const { return 0.; } - virtual RObjVecNum to_vec(int repetitions) const; + virtual RObjVecNum to_vec(int repetitions) const = 0; }; //! Data container holding a single integer number. diff --git a/pub/trivia/integrate.cpp b/pub/trivia/integrate.cpp index 3993cfb16bd72710eb7a79751441d0e8e4311a7f..f5ce5ed81df9155052e3439910e47c6955167756 100644 --- a/pub/trivia/integrate.cpp +++ b/pub/trivia/integrate.cpp @@ -52,6 +52,8 @@ double triv::integrate( case 6: rule = GSL_INTEG_GAUSS15; break; + default: + throw "Impossible case"; } // QAG adaptive integration gsl_integration_qag(&F, low, hig, epsabs, epsrel, nwork, rule, work, &val, &err);