Skip to content

Commit 4ee2d66

Browse files
committed
bugprone-pointer-arithmetic-on-polymorphic-object
1 parent 7c81682 commit 4ee2d66

2 files changed

Lines changed: 32 additions & 21 deletions

File tree

PWGDQ/Core/HistogramManager.cxx

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <iostream>
3131
#include <list>
3232
#include <memory>
33+
#include <span>
3334
#include <vector>
3435
using namespace std;
3536

@@ -49,11 +50,8 @@ HistogramManager::HistogramManager() : TNamed("", ""),
4950
fMainList(nullptr),
5051
fNVars(0),
5152
fUsedVars(nullptr),
52-
5353
fUseDefaultVariableNames(false),
54-
fBinsAllocated(0),
55-
fVariableNames(nullptr),
56-
fVariableUnits(nullptr)
54+
fBinsAllocated(0)
5755
{
5856
//
5957
// Constructor
@@ -67,9 +65,7 @@ HistogramManager::HistogramManager(const char* name, const char* title, const in
6765
fUsedVars(new bool[maxNVars]),
6866

6967
fUseDefaultVariableNames(kFALSE),
70-
fBinsAllocated(0),
71-
fVariableNames(),
72-
fVariableUnits()
68+
fBinsAllocated(0)
7369
{
7470
//
7571
// Constructor
@@ -81,8 +77,8 @@ HistogramManager::HistogramManager(const char* name, const char* title, const in
8177
for (int i = 0; i < maxNVars; ++i) {
8278
fUsedVars[i] = false;
8379
}
84-
fVariableNames = new TString[maxNVars];
85-
fVariableUnits = new TString[maxNVars];
80+
fVariableNames.resize(maxNVars);
81+
fVariableUnits.resize(maxNVars);
8682
}
8783

8884
//_______________________________________________________________________________
@@ -101,9 +97,11 @@ void HistogramManager::SetDefaultVarNames(TString* vars, TString* units)
10197
//
10298
// Set default variable names
10399
//
100+
std::span<TString> varNames{vars, fNVars};
101+
std::span<TString> varUnits{units, fNVars};
104102
for (int i = 0; i < fNVars; ++i) {
105-
fVariableNames[i] = vars[i];
106-
fVariableUnits[i] = units[i];
103+
fVariableNames[i] = varNames[i];
104+
fVariableUnits[i] = varUnits[i];
107105
}
108106
};
109107

@@ -630,6 +628,11 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
630628
}
631629
h->Sumw2();
632630

631+
std::span<TString> axisLabels{};
632+
if (axLabels) {
633+
axisLabels = std::span<TString>{axLabels, nDimensions};
634+
}
635+
633636
// configure the THn histogram and count the allocated bins
634637
for (int idim = 0; idim < nDimensions; ++idim) {
635638
nbins *= (nBins[idim] + 2);
@@ -641,8 +644,8 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
641644
if (arr->At(1 + idim)) {
642645
axis->SetTitle(arr->At(1 + idim)->GetName());
643646
}
644-
if (axLabels && !axLabels[idim].IsNull()) {
645-
MakeAxisLabels(axis, axLabels[idim].Data());
647+
if (!axisLabels.empty() && !axisLabels[idim].IsNull()) {
648+
MakeAxisLabels(axis, axisLabels[idim].Data());
646649
}
647650

648651
fUsedVars[vars[idim]] = kTRUE;
@@ -714,10 +717,13 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
714717
auto* xmin = new double[nDimensions];
715718
auto* xmax = new double[nDimensions];
716719
int* nBins = new int[nDimensions];
720+
std::span<const TArrayD> limits{binLimits, nDimensions};
717721
for (int idim = 0; idim < nDimensions; ++idim) {
718-
nBins[idim] = binLimits[idim].GetSize() - 1;
719-
xmin[idim] = binLimits[idim][0];
720-
xmax[idim] = binLimits[idim][nBins[idim]];
722+
const TArrayD& dimLimits = limits[idim];
723+
const double* dimBins = dimLimits.GetArray();
724+
nBins[idim] = dimLimits.GetSize() - 1;
725+
xmin[idim] = dimBins[0];
726+
xmax[idim] = dimBins[nBins[idim]];
721727
}
722728

723729
// initialize the THn with equal spaced bins
@@ -738,10 +744,15 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
738744
// rebin the axes according to the user requested binning
739745
for (int idim = 0; idim < nDimensions; ++idim) {
740746
TAxis* axis = h->GetAxis(idim);
741-
axis->Set(nBins[idim], binLimits[idim].GetArray());
747+
axis->Set(nBins[idim], limits[idim].GetArray());
742748
}
743749
h->Sumw2();
744750

751+
std::span<TString> axisLabels{};
752+
if (axLabels) {
753+
axisLabels = std::span<TString>{axLabels, nDimensions};
754+
}
755+
745756
uint32_t bins = 1;
746757
for (int idim = 0; idim < nDimensions; ++idim) {
747758
bins *= (nBins[idim] + 2);
@@ -753,8 +764,8 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
753764
if (arr->At(1 + idim)) {
754765
axis->SetTitle(arr->At(1 + idim)->GetName());
755766
}
756-
if (axLabels && !axLabels[idim].IsNull()) {
757-
MakeAxisLabels(axis, axLabels[idim].Data());
767+
if (!axisLabels.empty() && !axisLabels[idim].IsNull()) {
768+
MakeAxisLabels(axis, axisLabels[idim].Data());
758769
}
759770
fUsedVars[vars[idim]] = kTRUE;
760771
}

PWGDQ/Core/HistogramManager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ class HistogramManager : public TNamed
108108
// various
109109
bool fUseDefaultVariableNames; //! toggle the usage of default variable names and units
110110
uint64_t fBinsAllocated; //! number of allocated bins
111-
TString* fVariableNames; //! variable names
112-
TString* fVariableUnits; //! variable units
111+
std::vector<TString> fVariableNames; //! variable names
112+
std::vector<TString> fVariableUnits; //! variable units
113113

114114
void MakeAxisLabels(TAxis* ax, const char* labels);
115115

0 commit comments

Comments
 (0)