Skip to content

Commit 5a39ed0

Browse files
committed
Use 64bit int to prevent integer overflow
1 parent fdc8ba4 commit 5a39ed0

1 file changed

Lines changed: 16 additions & 16 deletions

File tree

src/DualAnalysisPlugin.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,12 +1005,12 @@ void DualAnalysisPlugin::onRefineFinished(mv::Dataset<Points> refineEmbedding)
10051005
// FIXME: is the indexing here correct when hsne scales > 2?
10061006
// get the transposed matrix of the drilled in source matrix
10071007
auto refinedSourceDatasetB = refineEmbedding->getSourceDataset<Points>();
1008-
const auto refinednumPoints = refinedSourceDatasetB->getNumPoints();
1009-
const auto refinednumDimensions = refinedSourceDatasetB->getNumDimensions();
1008+
const int64_t refinednumPoints = refinedSourceDatasetB->getNumPoints();
1009+
const int64_t refinednumDimensions = refinedSourceDatasetB->getNumDimensions();
10101010
QVector<float> transposedData(refinednumPoints * refinednumDimensions);
1011-
for (int i = 0; i < refinednumPoints; ++i)
1011+
for (int64_t i = 0; i < refinednumPoints; ++i)
10121012
{
1013-
for (int j = 0; j < refinednumDimensions; ++j)
1013+
for (int64_t j = 0; j < refinednumDimensions; ++j)
10141014
{
10151015
// Correct indexing for the transposed data
10161016
transposedData[j * refinednumPoints + i] = refinedSourceDatasetB->getValueAt(i * refinednumDimensions + j);
@@ -1261,10 +1261,10 @@ void DualAnalysisPlugin::onAlignmentTriggered()
12611261
qDebug() << "embeddingSourceDatasetA: " << embeddingSourceDatasetA->getGuiName() << " embeddingSourceDatasetB: " << embeddingSourceDatasetB->getGuiName();
12621262
qDebug() << "embedding2DDataset->getSourceDataset->getSourceDataset" << _embedding2DDatasetA->getSourceDataset<Points>()->getSourceDataset<Points>()->getGuiName();
12631263

1264-
int numDimensions = embeddingSourceDatasetA->getNumPoints();
1265-
int numDimensionsFull = embeddingSourceDatasetB->getNumDimensions();
1266-
int numPoints = embeddingSourceDatasetB->getSourceDataset<Points>()->getNumPoints();
1267-
int numPointsLocal = _embedding2DDatasetB->getNumPoints(); // num of points in the embedding B
1264+
const int64_t numDimensions = embeddingSourceDatasetA->getNumPoints();
1265+
const int64_t numDimensionsFull = embeddingSourceDatasetB->getNumDimensions();
1266+
const int64_t numPoints = embeddingSourceDatasetB->getSourceDataset<Points>()->getNumPoints();
1267+
const int64_t numPointsLocal = _embedding2DDatasetB->getNumPoints(); // num of points in the embedding B
12681268
qDebug() << "numDimensions: " << numDimensions << " numDimensionsFull: " << numDimensionsFull << " numPoints: " << numPoints;
12691269
qDebug() << "numPointsLocal: " << numPointsLocal << "numPoints source of sourceB " << embeddingSourceDatasetB->getSourceDataset<Points>()->getNumPoints();
12701270

@@ -1278,13 +1278,13 @@ void DualAnalysisPlugin::onAlignmentTriggered()
12781278
std::vector<float> columnRanges(numDimensions, 0.0f);
12791279

12801280
#pragma omp parallel for
1281-
for (int dimLocalIdx = 0; dimLocalIdx < numDimensions; dimLocalIdx++) {
1282-
int dimGlobalIdx = static_cast<int>(localGlobalIndicesA[dimLocalIdx]);
1281+
for (int64_t dimLocalIdx = 0; dimLocalIdx < numDimensions; dimLocalIdx++) {
1282+
int64_t dimGlobalIdx = static_cast<int>(localGlobalIndicesA[dimLocalIdx]);
12831283

12841284
float minValue = std::numeric_limits<float>::max();
12851285
float maxValue = -std::numeric_limits<float>::max();
12861286

1287-
for (int i = 0; i < numPoints; i++) {
1287+
for (int64_t i = 0; i < numPoints; i++) {
12881288
float val = embeddingSourceDatasetB->getValueAt(i * numDimensionsFull + dimGlobalIdx);
12891289
if (val < minValue) minValue = val;
12901290
if (val > maxValue) maxValue = val;
@@ -1307,13 +1307,13 @@ void DualAnalysisPlugin::onAlignmentTriggered()
13071307
embeddingSourceDatasetB->getGlobalIndices(localGlobalIndicesB);
13081308

13091309
#pragma omp parallel for
1310-
for (int dimLocalIdx = 0; dimLocalIdx < numDimensions; dimLocalIdx++) {
1311-
float threshold = columnMins[dimLocalIdx] + 0.9f * columnRanges[dimLocalIdx];
1312-
int dimGlobalIdx = static_cast<int>(localGlobalIndicesA[dimLocalIdx]);
1310+
for (int64_t dimLocalIdx = 0; dimLocalIdx < numDimensions; dimLocalIdx++) {
1311+
int64_t threshold = columnMins[dimLocalIdx] + 0.9f * columnRanges[dimLocalIdx];
1312+
int64_t dimGlobalIdx = static_cast<int64_t>(localGlobalIndicesA[dimLocalIdx]);
13131313

13141314
// Each thread deals with a different dimension => no concurrency on the same _connectionsAB index
1315-
for (int cellLocalIndex = 0; cellLocalIndex < numPoints; cellLocalIndex++) {
1316-
int cellGlobalIndex = static_cast<int>(localGlobalIndicesB[cellLocalIndex]);
1315+
for (int64_t cellLocalIndex = 0; cellLocalIndex < numPoints; cellLocalIndex++) {
1316+
int64_t cellGlobalIndex = static_cast<int>(localGlobalIndicesB[cellLocalIndex]);
13171317
float expression = embeddingSourceDatasetB->getValueAt(cellGlobalIndex * numDimensionsFull + dimGlobalIdx);
13181318

13191319
if (expression > threshold)

0 commit comments

Comments
 (0)