[PPL-devel] [GIT] ppl/ppl(sparse_matrices): PIP_Solution_Node: swap elements instead of copy-constructing them, in update_tableau().
Marco Poletti
poletti.marco at gmail.com
Thu Mar 25 19:14:20 CET 2010
Module: ppl/ppl
Branch: sparse_matrices
Commit: 76c398b3ee72ab472c15d19bd5db2ee3b7887a2d
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=76c398b3ee72ab472c15d19bd5db2ee3b7887a2d
Author: Marco Poletti <poletti.marco at gmail.com>
Date: Thu Mar 25 18:54:39 2010 +0100
PIP_Solution_Node: swap elements instead of copy-constructing them, in update_tableau().
---
src/PIP_Tree.cc | 45 ++++++++++++++++++++++++++++++---------------
1 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 9f95009..97033ca 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -2255,14 +2255,19 @@ PIP_Solution_Node::update_tableau(const PIP_Problem& pip,
{
std::sort(buffer.begin(), buffer.end());
std::vector<std::pair<dimension_type,Coefficient> >
- ::const_iterator j = buffer.begin();
+ ::iterator j = buffer.begin();
std::vector<std::pair<dimension_type,Coefficient> >
- ::const_iterator j_end = buffer.end();
+ ::iterator j_end = buffer.end();
if (j != j_end) {
- matrix_row_iterator itr = v_row.find_create(*j);
+ matrix_row_iterator itr = v_row.find_create(j->first);
+ // We need to do (*itr).second = j->second, this is faster.
+ std::swap((*itr).second, j->second);
++j;
- for ( ; j != j_end; ++j)
- itr = v_row.find_create(*j, itr);
+ for ( ; j != j_end; ++j) {
+ itr = v_row.find_create(j->first, itr);
+ // We need to do (*itr).second = j->second, this is faster.
+ std::swap((*itr).second, j->second);
+ }
}
}
buffer.clear();
@@ -2302,14 +2307,19 @@ PIP_Solution_Node::update_tableau(const PIP_Problem& pip,
{
std::sort(buffer.begin(), buffer.end());
std::vector<std::pair<dimension_type,Coefficient> >
- ::const_iterator j = buffer.begin();
+ ::iterator j = buffer.begin();
std::vector<std::pair<dimension_type,Coefficient> >
- ::const_iterator j_end = buffer.end();
+ ::iterator j_end = buffer.end();
if (j != j_end) {
- matrix_row_iterator itr = v_row.find_create(*j);
+ matrix_row_iterator itr = v_row.find_create(j->first);
+ // We need to do (*itr).second = j->second, this is faster.
+ std::swap((*itr).second, j->second);
++j;
- for ( ; j != j_end; ++j)
- itr = v_row.find_create(*j, itr);
+ for ( ; j != j_end; ++j) {
+ itr = v_row.find_create(j->first, itr);
+ // We need to do (*itr).second = j->second, this is faster.
+ std::swap((*itr).second, j->second);
+ }
}
}
buffer.clear();
@@ -2324,14 +2334,19 @@ PIP_Solution_Node::update_tableau(const PIP_Problem& pip,
{
std::sort(buffer.begin(), buffer.end());
std::vector<std::pair<dimension_type,Coefficient> >
- ::const_iterator j = buffer.begin();
+ ::iterator j = buffer.begin();
std::vector<std::pair<dimension_type,Coefficient> >
- ::const_iterator j_end = buffer.end();
+ ::iterator j_end = buffer.end();
if (j != j_end) {
- matrix_row_iterator itr = v_row.find_create(*j);
+ matrix_row_iterator itr = v_row.find_create(j->first);
+ // We need to do (*itr).second = j->second, this is faster.
+ std::swap((*itr).second, j->second);
++j;
- for ( ; j != j_end; ++j)
- itr = v_row.find_create(*j, itr);
+ for ( ; j != j_end; ++j) {
+ itr = v_row.find_create(j->first, itr);
+ // We need to do (*itr).second = j->second, this is faster.
+ std::swap((*itr).second, j->second);
+ }
}
}
buffer.clear();
More information about the PPL-devel
mailing list