stats: Fix issue when printing 2D vectors
This patch addresses an issue with the text-based stats output which resulted in Vector2D stats being printed without subnames in the event that one of the dimensions was of length 1. This patch also fixes the total printing for the 2D vector. Previously totals were printed without explicitly stating that a total was being printed. This has been rectified in this patch.
This commit is contained in:
parent
e7e17f92db
commit
6211c24a96
|
@ -249,6 +249,7 @@ struct VectorPrint
|
||||||
int precision;
|
int precision;
|
||||||
VResult vec;
|
VResult vec;
|
||||||
Result total;
|
Result total;
|
||||||
|
bool forceSubnames = false;
|
||||||
|
|
||||||
void operator()(ostream &stream) const;
|
void operator()(ostream &stream) const;
|
||||||
};
|
};
|
||||||
|
@ -279,6 +280,11 @@ VectorPrint::operator()(std::ostream &stream) const
|
||||||
bool havesub = !subnames.empty();
|
bool havesub = !subnames.empty();
|
||||||
|
|
||||||
if (_size == 1) {
|
if (_size == 1) {
|
||||||
|
// If forceSubnames is set, get the first subname (or index in
|
||||||
|
// the case where there are no subnames) and append it to the
|
||||||
|
// base name.
|
||||||
|
if (forceSubnames)
|
||||||
|
print.name = base + (havesub ? subnames[0] : to_string(0));
|
||||||
print.value = vec[0];
|
print.value = vec[0];
|
||||||
print(stream);
|
print(stream);
|
||||||
return;
|
return;
|
||||||
|
@ -550,6 +556,7 @@ Text::visit(const Vector2dInfo &info)
|
||||||
print.separatorString = info.separatorString;
|
print.separatorString = info.separatorString;
|
||||||
print.descriptions = descriptions;
|
print.descriptions = descriptions;
|
||||||
print.precision = info.precision;
|
print.precision = info.precision;
|
||||||
|
print.forceSubnames = true;
|
||||||
|
|
||||||
if (!info.subnames.empty()) {
|
if (!info.subnames.empty()) {
|
||||||
for (off_type i = 0; i < info.x; ++i)
|
for (off_type i = 0; i < info.x; ++i)
|
||||||
|
@ -558,7 +565,7 @@ Text::visit(const Vector2dInfo &info)
|
||||||
}
|
}
|
||||||
|
|
||||||
VResult tot_vec(info.y);
|
VResult tot_vec(info.y);
|
||||||
Result super_total = 0.0;
|
VResult super_total(1, 0.0);
|
||||||
for (off_type i = 0; i < info.x; ++i) {
|
for (off_type i = 0; i < info.x; ++i) {
|
||||||
if (havesub && (i >= info.subnames.size() || info.subnames[i].empty()))
|
if (havesub && (i >= info.subnames.size() || info.subnames[i].empty()))
|
||||||
continue;
|
continue;
|
||||||
|
@ -571,7 +578,7 @@ Text::visit(const Vector2dInfo &info)
|
||||||
yvec[j] = info.cvec[iy + j];
|
yvec[j] = info.cvec[iy + j];
|
||||||
tot_vec[j] += yvec[j];
|
tot_vec[j] += yvec[j];
|
||||||
total += yvec[j];
|
total += yvec[j];
|
||||||
super_total += yvec[j];
|
super_total[0] += yvec[j];
|
||||||
}
|
}
|
||||||
|
|
||||||
print.name = info.name + "_" +
|
print.name = info.name + "_" +
|
||||||
|
@ -582,11 +589,16 @@ Text::visit(const Vector2dInfo &info)
|
||||||
print(*stream);
|
print(*stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a subname for printing the total
|
||||||
|
vector<string> total_subname;
|
||||||
|
total_subname.push_back("total");
|
||||||
|
|
||||||
if (info.flags.isSet(::Stats::total) && (info.x > 1)) {
|
if (info.flags.isSet(::Stats::total) && (info.x > 1)) {
|
||||||
print.name = info.name;
|
print.name = info.name;
|
||||||
|
print.subnames = total_subname;
|
||||||
print.desc = info.desc;
|
print.desc = info.desc;
|
||||||
print.vec = tot_vec;
|
print.vec = super_total;
|
||||||
print.total = super_total;
|
print.flags = print.flags & ~total;
|
||||||
print(*stream);
|
print(*stream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue