[Lemon-commits] Alpar Juttner: Merge bugfix #480 to branch 1.2
Lemon HG
hg at lemon.cs.elte.hu
Thu Oct 8 10:20:22 CEST 2015
details: http://lemon.cs.elte.hu/hg/lemon/rev/4124fe8ef8de
changeset: 1364:4124fe8ef8de
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Wed Oct 07 18:54:57 2015 +0200
description:
Merge bugfix #480 to branch 1.2
diffstat:
tools/lgf-gen.cc | 41 +++++++++++++++++++++++++++--------------
1 files changed, 27 insertions(+), 14 deletions(-)
diffs (100 lines):
diff --git a/tools/lgf-gen.cc b/tools/lgf-gen.cc
--- a/tools/lgf-gen.cc
+++ b/tools/lgf-gen.cc
@@ -246,7 +246,7 @@
struct BeachIt;
- typedef std::multimap<double, BeachIt> SpikeHeap;
+ typedef std::multimap<double, BeachIt*> SpikeHeap;
typedef std::multimap<Part, SpikeHeap::iterator, YLess> Beach;
@@ -329,6 +329,7 @@
Beach::iterator bit = beach.upper_bound(Part(site, site, site));
if (bit->second != spikeheap.end()) {
+ delete bit->second->second;
spikeheap.erase(bit->second);
}
@@ -342,8 +343,8 @@
if (prev != -1 &&
circle_form(points[prev], points[curr], points[site])) {
double x = circle_point(points[prev], points[curr], points[site]);
- pit = spikeheap.insert(std::make_pair(x, BeachIt(beach.end())));
- pit->second.it =
+ pit = spikeheap.insert(std::make_pair(x, new BeachIt(beach.end())));
+ pit->second->it =
beach.insert(std::make_pair(Part(prev, curr, site), pit));
} else {
beach.insert(std::make_pair(Part(prev, curr, site), pit));
@@ -355,8 +356,8 @@
if (next != -1 &&
circle_form(points[site], points[curr],points[next])) {
double x = circle_point(points[site], points[curr], points[next]);
- nit = spikeheap.insert(std::make_pair(x, BeachIt(beach.end())));
- nit->second.it =
+ nit = spikeheap.insert(std::make_pair(x, new BeachIt(beach.end())));
+ nit->second->it =
beach.insert(std::make_pair(Part(site, curr, next), nit));
} else {
beach.insert(std::make_pair(Part(site, curr, next), nit));
@@ -366,7 +367,7 @@
} else {
sweep = spit->first;
- Beach::iterator bit = spit->second.it;
+ Beach::iterator bit = spit->second->it;
int prev = bit->first.prev;
int curr = bit->first.curr;
@@ -399,10 +400,22 @@
Beach::iterator nbit = bit; ++nbit;
int nnt = nbit->first.next;
- if (bit->second != spikeheap.end()) spikeheap.erase(bit->second);
- if (pbit->second != spikeheap.end()) spikeheap.erase(pbit->second);
- if (nbit->second != spikeheap.end()) spikeheap.erase(nbit->second);
-
+ if (bit->second != spikeheap.end())
+ {
+ delete bit->second->second;
+ spikeheap.erase(bit->second);
+ }
+ if (pbit->second != spikeheap.end())
+ {
+ delete pbit->second->second;
+ spikeheap.erase(pbit->second);
+ }
+ if (nbit->second != spikeheap.end())
+ {
+ delete nbit->second->second;
+ spikeheap.erase(nbit->second);
+ }
+
beach.erase(nbit);
beach.erase(bit);
beach.erase(pbit);
@@ -412,8 +425,8 @@
circle_form(points[ppv], points[prev], points[next])) {
double x = circle_point(points[ppv], points[prev], points[next]);
if (x < sweep) x = sweep;
- pit = spikeheap.insert(std::make_pair(x, BeachIt(beach.end())));
- pit->second.it =
+ pit = spikeheap.insert(std::make_pair(x, new BeachIt(beach.end())));
+ pit->second->it =
beach.insert(std::make_pair(Part(ppv, prev, next), pit));
} else {
beach.insert(std::make_pair(Part(ppv, prev, next), pit));
@@ -424,8 +437,8 @@
circle_form(points[prev], points[next], points[nnt])) {
double x = circle_point(points[prev], points[next], points[nnt]);
if (x < sweep) x = sweep;
- nit = spikeheap.insert(std::make_pair(x, BeachIt(beach.end())));
- nit->second.it =
+ nit = spikeheap.insert(std::make_pair(x, new BeachIt(beach.end())));
+ nit->second->it =
beach.insert(std::make_pair(Part(prev, next, nnt), nit));
} else {
beach.insert(std::make_pair(Part(prev, next, nnt), nit));
More information about the Lemon-commits
mailing list