]> granicus.if.org Git - graphviz/commitdiff
pass Rectangles to generateYConstraints as vector of values instead of pointers
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 22 May 2021 04:44:24 +0000 (21:44 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 29 May 2021 00:02:43 +0000 (17:02 -0700)
This allows a number of simplifications, most importantly removing manual
allocations in genYConstraints.

lib/vpsc/csolve_VPSC.cpp
lib/vpsc/generate-constraints.cpp
lib/vpsc/generate-constraints.h

index 95f4ed2ce892338e66a20d3cf1457e7a9458979f..8e44fa63a4f37a6eb318a5b73690b068c080fc8c 100644 (file)
@@ -47,14 +47,11 @@ int genXConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs,int transit
        return m;
 }
 int genYConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs) {
-       std::vector<Rectangle*> rs(n);
+       std::vector<Rectangle> rs;
        for(int i=0;i<n;i++) {
-               rs[i]=new Rectangle(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);
+               rs.emplace_back(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);
        }
        int m = generateYConstraints(rs,vs,*cs);
-       for(int i=0;i<n;i++) {
-               delete rs[i];
-       }
        return m;
 }
 
index 1b6768b24d51adf63bf55da3f85e0f463c3814d1..50a558d0a882d4849cb78138c5d7bd4440b686fe 100644 (file)
@@ -217,16 +217,16 @@ int generateXConstraints(const vector<Rectangle> &rs, Variable** vars,
 /**
  * Prepares constraints in order to apply VPSC vertically to remove ALL overlap.
  */
-int generateYConstraints(const vector<Rectangle*> &rs, Variable** vars,
+int generateYConstraints(const vector<Rectangle> &rs, Variable** vars,
          Constraint** &cs) {
 
        vector<Event> events;
        events.reserve(2 * rs.size());
        for(size_t i=0;i<rs.size();i++) {
-               vars[i]->desiredPosition=rs[i]->getCentreY();
-               Node *v = new Node(vars[i],*rs[i],rs[i]->getCentreY());
-               events.emplace_back(Open,v,rs[i]->getMinX());
-               events.emplace_back(Close,v,rs[i]->getMaxX());
+               vars[i]->desiredPosition=rs[i].getCentreY();
+               Node *v = new Node(vars[i],rs[i],rs[i].getCentreY());
+               events.emplace_back(Open,v,rs[i].getMinX());
+               events.emplace_back(Close,v,rs[i].getMaxX());
        }
        std::sort(events.begin(), events.end(), compare_events);
        NodeSet scanline;
index 591ddec32618eaf61740ffcbfefe7d6abe344128..2e95803196d3c8a26770c34f681462fb96833291 100644 (file)
@@ -79,5 +79,5 @@ struct Constraint;
 // returns number of constraints generated
 int generateXConstraints(const std::vector<Rectangle> &rs, Variable** vars,
        Constraint** &cs, const bool useNeighbourLists);
-int generateYConstraints(const std::vector<Rectangle*> &rs, Variable** vars,
+int generateYConstraints(const std::vector<Rectangle> &rs, Variable** vars,
        Constraint** &cs);