Graphviz 12.1.0~dev.20240716.0947
Loading...
Searching...
No Matches
block.h
Go to the documentation of this file.
1
20#pragma once
21
22#include <memory>
23#include <vector>
24#include <iostream>
26struct Variable;
27struct Constraint;
28
29class Block
30{
31 friend std::ostream& operator <<(std::ostream &os,const Block &b);
32public:
33 std::vector<Variable*> vars;
34 double posn;
35 double weight;
36 double wposn;
37 Block(Variable *v=nullptr);
38 Block(const Block &) = delete;
46 void merge(Block *b, Constraint *c, double dist);
47 void merge(Block *b, Constraint *c);
48 void mergeIn(Block *b);
49 void mergeOut(Block *b);
50 void split(Block *&l, Block *&r, Constraint *c);
51 Constraint* splitBetween(Variable* vl, Variable* vr, Block* &lb, Block* &rb);
52 void setUpInConstraints();
54 double cost();
55 bool deleted;
57 std::unique_ptr<PairingHeap<Constraint*>> in;
58 std::unique_ptr<PairingHeap<Constraint*>> out;
59private:
60 typedef enum {NONE, LEFT, RIGHT} Direction;
61 typedef std::pair<double, Constraint*> Pair;
62 void reset_active_lm(Variable *v, Variable *u);
63 double compute_dfdv(Variable *v, Variable *u, Constraint *&min_lm);
64 Pair compute_dfdv_between(
65 Variable*, Variable*, Variable*, Direction, bool);
66 bool canFollowLeft(const Constraint *c, const Variable *last);
67 bool canFollowRight(const Constraint *c, const Variable *last);
68 void populateSplitBlock(Block *b, Variable *v, Variable *u);
69 void addVariable(Variable *v);
70 void setUpConstraintHeap(std::unique_ptr<PairingHeap<Constraint*>> &h, bool use_in);
71};
static agxbuf last
last message
Definition agerror.c:29
Definition block.h:30
Block(const Block &)=delete
bool deleted
Definition block.h:55
Constraint * findMinInConstraint()
Definition block.cpp:138
std::vector< Variable * > vars
Definition block.h:33
double posn
Definition block.h:34
friend std::ostream & operator<<(std::ostream &os, const Block &b)
Constraint * findMinLM()
Definition block.cpp:310
Constraint * splitBetween(Variable *vl, Variable *vr, Block *&lb, Block *&rb)
Definition block.cpp:342
void deleteMinOutConstraint()
Definition block.cpp:205
void mergeIn(Block *b)
Definition block.cpp:119
void mergeOut(Block *b)
Definition block.cpp:133
void setUpOutConstraints()
Definition block.cpp:61
double wposn
Definition block.h:36
void setUpInConstraints()
Definition block.cpp:58
double cost()
Definition block.cpp:373
std::unique_ptr< PairingHeap< Constraint * > > out
Definition block.h:58
double desiredWeightedPosition()
Definition block.cpp:51
double weight
Definition block.h:35
Constraint * findMinOutConstraint()
Definition block.cpp:187
void merge(Block *b, Constraint *c, double dist)
Definition block.cpp:102
void deleteMinInConstraint()
Definition block.cpp:197
Constraint * findMinLMBetween(Variable *lv, Variable *rv)
Definition block.cpp:316
long timeStamp
Definition block.h:56
std::unique_ptr< PairingHeap< Constraint * > > in
Definition block.h:57
Pairing heap datastructure implementation.
Definition PairingHeap.h:68
static void split(void)
Definition ccomps.c:108
static double dist(int dim, double *x, double *y)
A constraint determines a minimum or exact spacing required between two variables.
Definition constraint.h:25
Definition closest.c:29