X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flayout.cpp;h=e9461b5eddf855e72fed34b8e6b4fa31bd90eefa;hb=b59fab7e533ef96d72c92b224d4f24718bc6b0a1;hp=b6248e6ad8511bb8dbaa9bc0d1ba5b1eaeaa18ba;hpb=9f38197854e699a6093a906ab43f4238f3cd2388;p=libs%2Fgltk.git diff --git a/source/layout.cpp b/source/layout.cpp index b6248e6..e9461b5 100644 --- a/source/layout.cpp +++ b/source/layout.cpp @@ -19,44 +19,44 @@ public: { private: LinearProgram &linprog; - unsigned index; + size_t index; public: - Row(LinearProgram &, unsigned); + Row(LinearProgram &, size_t); - float &operator[](unsigned); + float &operator[](size_t); float &back(); }; private: struct Column { - unsigned basic; + size_t basic; std::vector values; Column(); }; - unsigned n_columns = 1; - unsigned n_rows = 1; + size_t n_columns = 1; + size_t n_rows = 1; std::vector columns; bool solved = false; bool infeasible = false; public: - LinearProgram(unsigned); + LinearProgram(size_t); Row add_row(); - Row operator[](unsigned); + Row operator[](size_t); Row get_objective_row(); - float get_variable(unsigned); + float get_variable(size_t); bool solve(); private: void prepare_columns(); void add_artificial_variables(); void remove_artificial_variables(); - unsigned find_minimal_ratio(unsigned); - void make_basic_column(unsigned, unsigned); + size_t find_minimal_ratio(size_t); + void make_basic_column(size_t, size_t); bool pivot(); }; @@ -136,7 +136,7 @@ void Layout::push_arrangement(Arrangement &arr) Arrangement *Layout::get_arrangement() const { if(arrangement_stack.empty()) - return 0; + return nullptr; else return arrangement_stack.back(); } @@ -182,8 +182,8 @@ void Layout::remove_widget(Widget &wdg) { for(auto k=s->constraints.begin(); k!=s->constraints.end(); ) { - if(&k->target==*i) - s->constraints.erase(k++); + if(k->target==*i) + k = s->constraints.erase(k); else ++k; } @@ -199,7 +199,7 @@ void Layout::remove_widget(Widget &wdg) void Layout::update_slot_indices() { n_active_slots = 0; - unsigned n_floating = 0; + size_t n_floating = 0; for(Slot *s: slots) { if(s->widget.is_visible() || s->ghost) @@ -225,7 +225,7 @@ void Layout::update_slot_indices() } for(const Constraint &c: s->constraints) - if(c.target.index>s->index && (c.type&SLACK)) + if(c.target->index>s->index && (c.type&SLACK)) ++n_slack_vars[c.type&1]; } } @@ -253,7 +253,7 @@ void Layout::create_constraint(Widget &src, ConstraintType type, Widget &tgt, in Slot &tgt_slot = get_slot_for_widget(tgt); for(const Constraint &c: src_slot.constraints) - if(c.type==type && &c.target==&tgt_slot) + if(c.type==type && c.target==&tgt_slot) return; src_slot.constraints.push_back(Constraint(type, tgt_slot)); @@ -351,7 +351,7 @@ void Layout::solve_constraints(int dir, SolveMode mode) remaining three are slack columns; see below for their purposes. */ LinearProgram linprog(n_active_slots*5+n_slack_vars[dir]+1); float weight = slots.size()+1; - unsigned k = n_active_slots*5; + size_t k = n_active_slots*5; for(const Slot *s: slots) { if(s->index<0) @@ -423,7 +423,7 @@ void Layout::solve_constraints(int dir, SolveMode mode) /* Add rows for user-defined constraints. Constraints are always added in pairs, so it's only necessary to create a row for one half. */ for(const Constraint &c: s->constraints) - if(c.target.index>s->index && (c.type&1)==dir) + if(c.target->index>s->index && (c.type&1)==dir) { LinearProgram::Row row = linprog.add_row(); float polarity = ((c.type&SELF_DIM) ? -1 : 1); @@ -433,9 +433,9 @@ void Layout::solve_constraints(int dir, SolveMode mode) if(c.type&SELF_DIM) row[s->index*5+1] = polarity*dim_weight; if(c.type&TARGET_POS) - row[c.target.index*5] = -polarity; + row[c.target->index*5] = -polarity; if(c.type&TARGET_DIM) - row[c.target.index*5+1] = -polarity*dim_weight; + row[c.target->index*5+1] = -polarity*dim_weight; if(c.type&SPACING) row.back() = (c.spacing>=0 ? c.spacing : this->*(ptrs.spacing)); if(c.type&SLACK) @@ -470,7 +470,7 @@ void Layout::solve_constraints(int dir, SolveMode mode) Layout::Constraint::Constraint(ConstraintType t, Slot &s): type(t), - target(s) + target(&s) { } @@ -624,7 +624,7 @@ void operator>>(const LexicalConverter &conv, Layout::ConstraintType &ctype) } -Layout::LinearProgram::LinearProgram(unsigned s): +Layout::LinearProgram::LinearProgram(size_t s): n_columns(s), columns(n_columns) { } @@ -634,7 +634,7 @@ Layout::LinearProgram::Row Layout::LinearProgram::add_row() return Row(*this, n_rows++); } -Layout::LinearProgram::Row Layout::LinearProgram::operator[](unsigned r) +Layout::LinearProgram::Row Layout::LinearProgram::operator[](size_t r) { if(r>=n_rows) throw out_of_range("LinearProgram::operator[]"); @@ -647,14 +647,14 @@ Layout::LinearProgram::Row Layout::LinearProgram::get_objective_row() return Row(*this, 0); } -float Layout::LinearProgram::get_variable(unsigned i) +float Layout::LinearProgram::get_variable(size_t i) { if(!solved || infeasible) throw logic_error("not solved"); if(i+1>=n_columns) throw out_of_range("LinearProgram::get_variable"); - if(unsigned r = columns[i].basic) + if(size_t r = columns[i].basic) return columns.back().values[r]; else return 0; @@ -707,7 +707,7 @@ void Layout::LinearProgram::prepare_columns() if(c.values.size()>=2 && c.values.back()!=0.0f && (constants.size()=0.0f) && obj_coeff[c.values.size()-1]==0.0f) { bool basic = true; - for(unsigned j=1; (basic && j+1 artificial_rows(n_rows-1); - for(unsigned i=0; i artificial_rows(n_rows-1); + for(size_t i=0; i::infinity(); - unsigned row = 0; - for(unsigned i=1; i0) { float ratio = columns.back().values[i]/columns[c].values[i]; @@ -826,11 +826,11 @@ unsigned Layout::LinearProgram::find_minimal_ratio(unsigned c) return row; } -void Layout::LinearProgram::make_basic_column(unsigned c, unsigned r) +void Layout::LinearProgram::make_basic_column(size_t c, size_t r) { /* Perform row transfer operations to make the pivot column basic, containing a 1 on the pivot row. */ - for(unsigned i=0; i0) - if(unsigned row = find_minimal_ratio(i)) + if(size_t row = find_minimal_ratio(i)) { make_basic_column(i, row); return true; @@ -869,12 +869,12 @@ bool Layout::LinearProgram::pivot() } -Layout::LinearProgram::Row::Row(LinearProgram &lp, unsigned i): +Layout::LinearProgram::Row::Row(LinearProgram &lp, size_t i): linprog(lp), index(i) { } -float &Layout::LinearProgram::Row::operator[](unsigned c) +float &Layout::LinearProgram::Row::operator[](size_t c) { if(c>=linprog.n_columns) throw out_of_range("Row::operator[]");