Skip to content

Commit 0a32af9

Browse files
authored
Merge pull request #7391 from Faholan/delete-lut
Delete LUT
2 parents e613a36 + 44d09d2 commit 0a32af9

2 files changed

Lines changed: 15 additions & 16 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 & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ static void readLUTfiles(LUT_TYPE LUT, NUMSOLN_TYPE numsoln)
7474
{
7575
unsigned char charnum[256], line[32], *linep, c;
7676
FILE *fpwv, *fprt;
77-
struct csoln* p;
7877
int d, i, j, k, kk, ns, nn;
7978

8079
for (i = 0; i <= 255; i++) {
@@ -114,12 +113,11 @@ static void readLUTfiles(LUT_TYPE LUT, NUMSOLN_TYPE numsoln)
114113
fscanf(fpwv, "%d", &kk);
115114
fgetc(fpwv); // '/n'
116115
numsoln[d][k] = numsoln[d][kk];
117-
LUT[d][k] = LUT[d][kk];
116+
(*LUT)[d][k] = (*LUT)[d][kk];
118117
} else {
119118
fgetc(fpwv); // '\n'
120119
numsoln[d][k] = ns;
121-
p = (struct csoln*) malloc(ns * sizeof(struct csoln));
122-
LUT[d][k] = p;
120+
auto p = std::make_shared<struct csoln[]>(ns);
123121
for (i = 1; i <= ns; i++) {
124122
linep = (unsigned char*) fgets((char*) line, 32, fpwv);
125123
p->parent = charnum[*(linep++)];
@@ -147,6 +145,7 @@ static void readLUTfiles(LUT_TYPE LUT, NUMSOLN_TYPE numsoln)
147145
#endif
148146
p++;
149147
}
148+
(*LUT)[d][k] = std::move(p);
150149
}
151150
}
152151
}
@@ -189,15 +188,16 @@ void Flute::readLUT()
189188
makeLUT(LUT_, numsoln_);
190189
initLUT(FLUTE_D, LUT_, numsoln_);
191190
checkLUT(LUT, numsoln, LUT_, numsoln_);
191+
deleteLUT(LUT_, numsoln_);
192192
#endif
193193
}
194194

195195
void Flute::makeLUT(LUT_TYPE& LUT, NUMSOLN_TYPE& numsoln)
196196
{
197-
LUT = new struct csoln**[FLUTE_D + 1];
197+
LUT = new boost::multi_array<std::shared_ptr<struct csoln[]>, 2>(
198+
boost::extents[FLUTE_D + 1][MGROUP]);
198199
numsoln = new int*[FLUTE_D + 1];
199200
for (int d = 4; d <= FLUTE_D; d++) {
200-
LUT[d] = new struct csoln*[MGROUP];
201201
numsoln[d] = new int[MGROUP];
202202
}
203203
}
@@ -210,13 +210,11 @@ void Flute::deleteLUT()
210210
void Flute::deleteLUT(LUT_TYPE& LUT, NUMSOLN_TYPE& numsoln)
211211
{
212212
if (LUT) {
213+
delete LUT;
213214
for (int d = 4; d <= FLUTE_D; d++) {
214-
delete[] LUT[d];
215215
delete[] numsoln[d];
216216
}
217217
delete[] numsoln;
218-
delete[] LUT;
219-
LUT = nullptr;
220218
}
221219
}
222220

@@ -277,12 +275,12 @@ void Flute::initLUT(int to_d, LUT_TYPE LUT, NUMSOLN_TYPE numsoln)
277275
int kk;
278276
pwv = readDecimalInt(pwv, kk) + 1;
279277
numsoln[d][k] = numsoln[d][kk];
280-
LUT[d][k] = LUT[d][kk];
278+
(*LUT)[d][k] = (*LUT)[d][kk];
281279
} else {
282280
pwv++; // '\n'
283281
numsoln[d][k] = ns;
284282
struct csoln* p = new struct csoln[ns];
285-
LUT[d][k] = p;
283+
(*LUT)[d][k] = std::shared_ptr<struct csoln[]>(p);
286284
for (int i = 1; i <= ns; i++) {
287285
p->parent = charNum(*pwv++);
288286

@@ -348,8 +346,8 @@ static void checkLUT(LUT_TYPE LUT1,
348346
int ns2 = numsoln2[d][k];
349347
if (ns1 != ns2)
350348
printf("numsoln[%d][%d] mismatch\n", d, k);
351-
struct csoln* soln1 = LUT1[d][k];
352-
struct csoln* soln2 = LUT2[d][k];
349+
struct csoln* soln1 = LUT1[d][k].get();
350+
struct csoln* soln2 = LUT2[d][k].get();
353351
if (soln1->parent != soln2->parent)
354352
printf("LUT[%d][%d]->parent mismatch\n", d, k);
355353
for (int j = 0; soln1->seg[j] != 0; j++) {
@@ -573,7 +571,7 @@ int Flute::flutes_wl_LD(int d,
573571
}
574572

575573
minl = l[0] = xs[d - 1] - xs[0] + ys[d - 1] - ys[0];
576-
rlist = LUT[d][k];
574+
rlist = (*LUT)[d][k].get();
577575
for (i = 0; rlist->seg[i] > 0; i++) {
578576
minl += dd[rlist->seg[i]];
579577
}
@@ -1135,7 +1133,7 @@ Tree Flute::flutes_LD(int d,
11351133
}
11361134

11371135
minl = l[0] = xs[d - 1] - xs[0] + ys[d - 1] - ys[0];
1138-
rlist = LUT[d][k];
1136+
rlist = (*LUT)[d][k].get();
11391137
for (i = 0; rlist->seg[i] > 0; i++) {
11401138
minl += dd[rlist->seg[i]];
11411139
}

0 commit comments

Comments
 (0)