Graphviz 15.1.1~dev.20260630.1303
Loading...
Searching...
No Matches
csolve_VPSC.cpp
Go to the documentation of this file.
1
18#include "config.h"
19
20#include <iostream>
21#include <vpsc/variable.h>
22#include <vpsc/constraint.h>
24#include <vpsc/solve_VPSC.h>
25#include <cstdlib>
26#include <cassert>
27#include <vector>
28#include <vpsc/csolve_VPSC.h>
29Variable* newVariable(int id, double desiredPos, double weight) {
30 return new Variable(id,desiredPos,weight);
31}
33 return new Constraint(left,right,gap);
34}
35VPSC* newIncVPSC(int n, Variable* vs[], int m, Constraint* cs[]) {
36 return new IncVPSC(n,vs,m,cs);
37}
38
39int genXConstraints(size_t n, boxf *bb, Variable **vs, Constraint ***cs,
40 bool transitiveClosure) {
41 std::vector<Rectangle> rs;
42 for (size_t i = 0; i < n; i++) {
43 rs.emplace_back(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);
44 }
45 const int m = generateXConstraints(rs, vs, *cs, transitiveClosure);
46 return m;
47}
48
49int genYConstraints(size_t n, boxf *bb, Variable **vs, Constraint ***cs) {
50 std::vector<Rectangle> rs;
51 for(size_t i = 0; i < n; i++) {
52 rs.emplace_back(bb[i].LL.x,bb[i].UR.x,bb[i].LL.y,bb[i].UR.y);
53 }
54 const int m = generateYConstraints(rs, vs, *cs);
55 return m;
56}
57
59 return new Constraint*[m];
60}
61
62void deleteConstraints(size_t m, Constraint **cs) {
63 for (size_t i = 0; i < m; i++) {
64 delete cs[i];
65 }
66 delete [] cs;
67}
69 delete c;
70}
72 delete v;
73}
74void satisfyVPSC(VPSC* vpsc) {
75 try {
76 vpsc->satisfy();
77 } catch(const char *e) {
78 std::cerr << e << "\n";
79 std::exit(1);
80 }
81}
82void deleteVPSC(VPSC *vpsc) {
83 assert(vpsc!=nullptr);
84 delete vpsc;
85}
86void solveVPSC(VPSC* vpsc) {
87 vpsc->solve();
88}
89void setVariableDesiredPos(Variable *v, double desiredPos) {
90 v->desiredPosition = desiredPos;
91}
92double getVariablePos(const Variable *v) {
93 return v->position();
94}
95void remapInConstraints(Variable *u, Variable *v, double dgap) {
96 for (Constraint *c : u->in) {
97 c->right=v;
98 c->gap+=dgap;
99 v->in.push_back(c);
100 }
101 u->in.clear();
102}
103void remapOutConstraints(Variable *u, Variable *v, double dgap) {
104 for (Constraint *c : u->out) {
105 c->left=v;
106 c->gap+=dgap;
107 v->out.push_back(c);
108 }
109 u->out.clear();
110}
#define right(i)
Definition closest.c:74
void setVariableDesiredPos(Variable *v, double desiredPos)
int genYConstraints(size_t n, boxf *bb, Variable **vs, Constraint ***cs)
Variable * newVariable(int id, double desiredPos, double weight)
Bridge for C programs to access solve_VPSC (which is in C++)
Constraint ** newConstraints(int m)
void deleteConstraint(Constraint *c)
VPSC * newIncVPSC(int n, Variable *vs[], int m, Constraint *cs[])
void deleteVariable(Variable *v)
Constraint * newConstraint(Variable *left, Variable *right, double gap)
void remapInConstraints(Variable *u, Variable *v, double dgap)
void remapOutConstraints(Variable *u, Variable *v, double dgap)
double getVariablePos(const Variable *v)
void deleteConstraints(size_t m, Constraint **cs)
void satisfyVPSC(VPSC *vpsc)
void deleteVPSC(VPSC *vpsc)
void solveVPSC(VPSC *vpsc)
int genXConstraints(size_t n, boxf *bb, Variable **vs, Constraint ***cs, bool transitiveClosure)
#define left
Definition dthdr.h:12
int generateYConstraints(const vector< Rectangle > &rs, Variable **vars, Constraint **&cs)
int generateXConstraints(const vector< Rectangle > &rs, Variable **vars, Constraint **&cs, const bool useNeighbourLists)
A constraint determines a minimum or exact spacing required between two variables.
Definition constraint.h:25
virtual void solve()
virtual void satisfy()
double desiredPosition
Definition variable.h:30
Constraints out
Definition variable.h:36
Constraints in
Definition variable.h:35
double position() const
Definition variable.h:46
Definition geom.h:41
pointf UR
Definition geom.h:41
pointf LL
Definition geom.h:41
double x
Definition geom.h:29
double y
Definition geom.h:29