]> granicus.if.org Git - graphviz/commitdiff
pass Rectangles to generateXConstraints as vector of values instead of pointers
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 22 May 2021 04:39:30 +0000 (21:39 -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 genXConstraints.

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

index e74d07d4564ce88118d7d536d3632f7a4f60bc16..95f4ed2ce892338e66a20d3cf1457e7a9458979f 100644 (file)
@@ -39,14 +39,11 @@ VPSC* newIncVPSC(int n, Variable* vs[], int m, Constraint* cs[]) {
 }
 
 int genXConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs,int transitiveClosure) {
-       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 = generateXConstraints(rs,vs,*cs,transitiveClosure?true:false);
-       for(int i=0;i<n;i++) {
-               delete rs[i];
-       }
        return m;
 }
 int genYConstraints(int n, boxf* bb, Variable** vs, Constraint*** cs) {
index 00f5d5c9058f403b4ebbb182abc4e2d24a4848e2..1b6768b24d51adf63bf55da3f85e0f463c3814d1 100644 (file)
@@ -139,16 +139,16 @@ static bool compare_events(const Event &ea, const Event &eb) {
  * useNeighbourLists determines whether or not a heuristic is used to deciding whether to resolve
  * all overlap in the x pass, or leave some overlaps for the y pass.
  */
-int generateXConstraints(const vector<Rectangle*> &rs, Variable** vars,
+int generateXConstraints(const vector<Rectangle> &rs, Variable** vars,
          Constraint** &cs, const bool useNeighbourLists) {
 
        vector<Event> events;
        events.reserve(2 * rs.size());
        for(size_t i=0;i<rs.size();i++) {
-               vars[i]->desiredPosition=rs[i]->getCentreX();
-               Node *v = new Node(vars[i],*rs[i],rs[i]->getCentreX());
-               events.emplace_back(Open,v,rs[i]->getMinY());
-               events.emplace_back(Close,v,rs[i]->getMaxY());
+               vars[i]->desiredPosition=rs[i].getCentreX();
+               Node *v = new Node(vars[i],rs[i],rs[i].getCentreX());
+               events.emplace_back(Open,v,rs[i].getMinY());
+               events.emplace_back(Close,v,rs[i].getMaxY());
        }
        std::sort(events.begin(), events.end(), compare_events);
 
index 14047d4775cbf236034a2c114d53f728509ce874..591ddec32618eaf61740ffcbfefe7d6abe344128 100644 (file)
@@ -77,7 +77,7 @@ struct Variable;
 struct Constraint;
 
 // returns number of constraints generated
-int generateXConstraints(const std::vector<Rectangle*> &rs, Variable** vars,
+int generateXConstraints(const std::vector<Rectangle> &rs, Variable** vars,
        Constraint** &cs, const bool useNeighbourLists);
 int generateYConstraints(const std::vector<Rectangle*> &rs, Variable** vars,
        Constraint** &cs);