Skip to content

Commit cab5e5f

Browse files
committed
use a boost::multi_array with shared_ptr
Signed-off-by: Faholan <62927863+Faholan@users.noreply.github.com>
1 parent 9e1a817 commit cab5e5f

2 files changed

Lines changed: 15 additions & 15 deletions

File tree

src/stt/include/stt/flute.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <vector>
55

66
#include "SteinerTreeBuilder.h"
7+
#include "boost/multi_array.hpp"
78

89
#pragma once
910

@@ -32,7 +33,7 @@ class Flute
3233
struct csoln;
3334

3435
private:
35-
using LUT_TYPE = struct csoln***;
36+
using LUT_TYPE = boost::multi_array<std::shared_ptr<struct csoln[]>, 2>*;
3637
using NUMSOLN_TYPE = int**;
3738

3839
public:

src/stt/src/flt/flute.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,12 @@ static void readLUTfiles(LUT_TYPE LUT, NUMSOLN_TYPE numsoln)
114114
fscanf(fpwv, "%d", &kk);
115115
fgetc(fpwv); // '/n'
116116
numsoln[d][k] = numsoln[d][kk];
117-
LUT[d][k] = LUT[d][kk];
117+
(*LUT)[d][k] = (*LUT)[d][kk];
118118
} else {
119119
fgetc(fpwv); // '\n'
120120
numsoln[d][k] = ns;
121-
p = (struct csoln*) malloc(ns * sizeof(struct csoln));
122-
LUT[d][k] = p;
121+
p = new struct csoln[ns];
122+
(*LUT)[d][k] = std::shared_ptr<struct csoln[]>(p);
123123
for (i = 1; i <= ns; i++) {
124124
linep = (unsigned char*) fgets((char*) line, 32, fpwv);
125125
p->parent = charnum[*(linep++)];
@@ -189,15 +189,16 @@ void Flute::readLUT()
189189
makeLUT(LUT_, numsoln_);
190190
initLUT(FLUTE_D, LUT_, numsoln_);
191191
checkLUT(LUT, numsoln, LUT_, numsoln_);
192+
deleteLUT(LUT_, numsoln_);
192193
#endif
193194
}
194195

195196
void Flute::makeLUT(LUT_TYPE& LUT, NUMSOLN_TYPE& numsoln)
196197
{
197-
LUT = new struct csoln**[FLUTE_D + 1];
198+
LUT = new boost::multi_array<std::shared_ptr<struct csoln[]>, 2>(
199+
boost::extents[FLUTE_D + 1][MGROUP]);
198200
numsoln = new int*[FLUTE_D + 1];
199201
for (int d = 4; d <= FLUTE_D; d++) {
200-
LUT[d] = new struct csoln*[MGROUP];
201202
numsoln[d] = new int[MGROUP];
202203
}
203204
}
@@ -210,13 +211,11 @@ void Flute::deleteLUT()
210211
void Flute::deleteLUT(LUT_TYPE& LUT, NUMSOLN_TYPE& numsoln)
211212
{
212213
if (LUT) {
214+
delete LUT;
213215
for (int d = 4; d <= FLUTE_D; d++) {
214-
delete[] LUT[d];
215216
delete[] numsoln[d];
216217
}
217218
delete[] numsoln;
218-
delete[] LUT;
219-
LUT = nullptr;
220219
}
221220
}
222221

@@ -277,12 +276,12 @@ void Flute::initLUT(int to_d, LUT_TYPE LUT, NUMSOLN_TYPE numsoln)
277276
int kk;
278277
pwv = readDecimalInt(pwv, kk) + 1;
279278
numsoln[d][k] = numsoln[d][kk];
280-
LUT[d][k] = LUT[d][kk];
279+
(*LUT)[d][k] = (*LUT)[d][kk];
281280
} else {
282281
pwv++; // '\n'
283282
numsoln[d][k] = ns;
284283
struct csoln* p = new struct csoln[ns];
285-
LUT[d][k] = p;
284+
(*LUT)[d][k] = std::shared_ptr<struct csoln[]>(p);
286285
for (int i = 1; i <= ns; i++) {
287286
p->parent = charNum(*pwv++);
288287

@@ -348,8 +347,8 @@ static void checkLUT(LUT_TYPE LUT1,
348347
int ns2 = numsoln2[d][k];
349348
if (ns1 != ns2)
350349
printf("numsoln[%d][%d] mismatch\n", d, k);
351-
struct csoln* soln1 = LUT1[d][k];
352-
struct csoln* soln2 = LUT2[d][k];
350+
struct csoln* soln1 = LUT1[d][k].get();
351+
struct csoln* soln2 = LUT2[d][k].get();
353352
if (soln1->parent != soln2->parent)
354353
printf("LUT[%d][%d]->parent mismatch\n", d, k);
355354
for (int j = 0; soln1->seg[j] != 0; j++) {
@@ -573,7 +572,7 @@ int Flute::flutes_wl_LD(int d,
573572
}
574573

575574
minl = l[0] = xs[d - 1] - xs[0] + ys[d - 1] - ys[0];
576-
rlist = LUT[d][k];
575+
rlist = (*LUT)[d][k].get();
577576
for (i = 0; rlist->seg[i] > 0; i++) {
578577
minl += dd[rlist->seg[i]];
579578
}
@@ -1135,7 +1134,7 @@ Tree Flute::flutes_LD(int d,
11351134
}
11361135

11371136
minl = l[0] = xs[d - 1] - xs[0] + ys[d - 1] - ys[0];
1138-
rlist = LUT[d][k];
1137+
rlist = (*LUT)[d][k].get();
11391138
for (i = 0; rlist->seg[i] > 0; i++) {
11401139
minl += dd[rlist->seg[i]];
11411140
}

0 commit comments

Comments
 (0)