Row add_row();
Row operator[](unsigned);
- Row get_object_row();
+ Row get_objective_row();
bool solve();
float get_variable(unsigned);
private:
for(list<Slot *>::iterator i=slots.begin(); i!=slots.end(); ++i)
(*i)->widget.set_geometry((*i)->geom);
-
}
void Layout::solve_constraints(int dir)
float weight = slots.size();
for(list<Slot *>::iterator i=slots.begin(); i!=slots.end(); ++i)
{
- linprog.get_object_row()[(*i)->index*5] = ((*i)->*(ptrs.packing)).gravity/weight;
- linprog.get_object_row()[(*i)->index*5+1] = (((*i)->*(ptrs.packing)).expand ? weight : -1);
+ linprog.get_objective_row()[(*i)->index*5] = ((*i)->*(ptrs.packing)).gravity/weight;
+ linprog.get_objective_row()[(*i)->index*5+1] = (((*i)->*(ptrs.packing)).expand ? weight : -1);
{
// Prevent the widget from going past the container's low edge.
constraints are always added in pairs, so it's only necessary to create a
row for one half. */
for(list<Constraint>::iterator j=(*i)->constraints.begin(); j!=(*i)->constraints.end(); ++j)
- {
if((j->type&1)==dir && j->type!=BELOW && j->type!=LEFT_OF)
{
LinearProgram::Row row = linprog.add_row();
if(j->type&SPACING)
row.back() = this->*(ptrs.spacing);
}
- }
}
if(!linprog.solve())
return Row(*this, r);
}
-Layout::LinearProgram::Row Layout::LinearProgram::get_object_row()
+Layout::LinearProgram::Row Layout::LinearProgram::get_objective_row()
{
return Row(*this, 0);
}
/* Pick the row with the minimum ratio between the constant column and the
pivot column. This ensures that when the pivot column is made basic, values
in the constant column stay positive.
-
+
The use of n_rows instead of the true size of the column is intentional,
since the relocated objective row must be ignored in phase 1. */
float best = numeric_limits<float>::infinity();
row = i;
}
}
-
+
return row;
}
}
float scale = columns[i].values[r]/columns[c].values[r];
-
+
+ columns[i].values[r] = scale;
for(unsigned j=0; j<columns[i].values.size(); ++j)
- {
- if(j==r)
- columns[i].values[j] = scale;
- else
+ if(j!=r)
columns[i].values[j] -= scale*columns[c].values[j];
- }
}
columns[c].basic = r;