From: Matthew Fernandez Date: Sat, 12 Jun 2021 19:21:25 +0000 (-0700) Subject: manage node pointers within VPSC Event type as smart pointers X-Git-Tag: 2.48.0~44^2~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd2456770c1e13937253eac53cd8a380ec43fc0e;p=graphviz manage node pointers within VPSC Event type as smart pointers This removes the need to track these allocations and removes some raw delete. --- diff --git a/lib/vpsc/generate-constraints.cpp b/lib/vpsc/generate-constraints.cpp index 50a558d0a..228c9556f 100644 --- a/lib/vpsc/generate-constraints.cpp +++ b/lib/vpsc/generate-constraints.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -115,9 +116,10 @@ static NodeSet getRightNeighbours(NodeSet &scanline,Node *v) { typedef enum {Open, Close} EventType; struct Event { EventType type; - Node *v; + std::shared_ptr v; double pos; - Event(EventType t, Node *v, double p) : type(t),v(v),pos(p) {}; + Event(EventType t, const std::shared_ptr &v, double p) + : type(t),v(v),pos(p) {}; }; static bool compare_events(const Event &ea, const Event &eb) { @@ -146,7 +148,7 @@ int generateXConstraints(const vector &rs, Variable** vars, events.reserve(2 * rs.size()); for(size_t i=0;idesiredPosition=rs[i].getCentreX(); - Node *v = new Node(vars[i],rs[i],rs[i].getCentreX()); + auto v = std::make_shared(vars[i],rs[i],rs[i].getCentreX()); events.emplace_back(Open,v,rs[i].getMinY()); events.emplace_back(Close,v,rs[i].getMaxY()); } @@ -155,7 +157,7 @@ int generateXConstraints(const vector &rs, Variable** vars, NodeSet scanline; vector constraints; for(Event &e : events) { - Node *v=e.v; + Node *v = e.v.get(); if(e.type==Open) { scanline.insert(v); if(useNeighbourLists) { @@ -205,7 +207,6 @@ int generateXConstraints(const vector &rs, Variable** vars, } } scanline.erase(v); - delete v; } } int m =constraints.size(); @@ -224,7 +225,7 @@ int generateYConstraints(const vector &rs, Variable** vars, events.reserve(2 * rs.size()); for(size_t i=0;idesiredPosition=rs[i].getCentreY(); - Node *v = new Node(vars[i],rs[i],rs[i].getCentreY()); + auto v = std::make_shared(vars[i],rs[i],rs[i].getCentreY()); events.emplace_back(Open,v,rs[i].getMinX()); events.emplace_back(Close,v,rs[i].getMaxX()); } @@ -232,7 +233,7 @@ int generateYConstraints(const vector &rs, Variable** vars, NodeSet scanline; vector constraints; for(Event &e : events) { - Node *v=e.v; + Node *v = e.v.get(); if(e.type==Open) { scanline.insert(v); NodeSet::iterator i=scanline.find(v); @@ -261,7 +262,6 @@ int generateYConstraints(const vector &rs, Variable** vars, r->firstAbove=v->firstAbove; } scanline.erase(v); - delete v; } } int m =constraints.size();