C++11: Cleaned up program framework with range-based for

This commit is contained in:
Paul Beckingham
2015-05-11 17:50:53 -04:00
parent 5a57dfd70d
commit e74c6963a9
28 changed files with 937 additions and 1221 deletions

View File

@@ -49,13 +49,12 @@ bool taskDiff (const Task& before, const Task& after)
// Attributes are all there is, so figure the different attribute names
// between before and after.
std::vector <std::string> beforeAtts;
Task::const_iterator att;
for (att = before.begin (); att != before.end (); ++att)
beforeAtts.push_back (att->first);
for (auto& att : before)
beforeAtts.push_back (att.first);
std::vector <std::string> afterAtts;
for (att = after.begin (); att != after.end (); ++att)
afterAtts.push_back (att->first);
for (auto& att : after)
afterAtts.push_back (att.first);
std::vector <std::string> beforeOnly;
std::vector <std::string> afterOnly;
@@ -65,10 +64,9 @@ bool taskDiff (const Task& before, const Task& after)
afterOnly.size ())
return true;
std::vector <std::string>::iterator name;
for (name = beforeAtts.begin (); name != beforeAtts.end (); ++name)
if (*name != "uuid" &&
before.get (*name) != after.get (*name))
for (auto& name : beforeAtts)
if (name != "uuid" &&
before.get (name) != after.get (name))
return true;
return false;
@@ -80,13 +78,12 @@ std::string taskDifferences (const Task& before, const Task& after)
// Attributes are all there is, so figure the different attribute names
// between before and after.
std::vector <std::string> beforeAtts;
Task::const_iterator att;
for (att = before.begin (); att != before.end (); ++att)
beforeAtts.push_back (att->first);
for (auto& att : before)
beforeAtts.push_back (att.first);
std::vector <std::string> afterAtts;
for (att = after.begin (); att != after.end (); ++att)
afterAtts.push_back (att->first);
for (auto& att : after)
afterAtts.push_back (att.first);
std::vector <std::string> beforeOnly;
std::vector <std::string> afterOnly;
@@ -94,15 +91,14 @@ std::string taskDifferences (const Task& before, const Task& after)
// Now start generating a description of the differences.
std::stringstream out;
std::vector <std::string>::iterator name;
for (name = beforeOnly.begin (); name != beforeOnly.end (); ++name)
for (auto& name : beforeOnly)
out << " - "
<< format (STRING_FEEDBACK_DELETED, ucFirst (*name))
<< format (STRING_FEEDBACK_DELETED, ucFirst (name))
<< "\n";
for (name = afterOnly.begin (); name != afterOnly.end (); ++name)
for (auto& name : afterOnly)
{
if (*name == "depends")
if (name == "depends")
{
std::vector <int> deps_after;
after.getDependencies (deps_after);
@@ -116,21 +112,21 @@ std::string taskDifferences (const Task& before, const Task& after)
else
out << " - "
<< format (STRING_FEEDBACK_ATT_SET,
ucFirst (*name),
renderAttribute (*name, after.get (*name)))
ucFirst (name),
renderAttribute (name, after.get (name)))
<< "\n";
}
for (name = beforeAtts.begin (); name != beforeAtts.end (); ++name)
for (auto& name : beforeAtts)
{
// Ignore UUID differences, and find values that changed, but are not also
// in the beforeOnly and afterOnly lists, which have been handled above..
if (*name != "uuid" &&
before.get (*name) != after.get (*name) &&
std::find (beforeOnly.begin (), beforeOnly.end (), *name) == beforeOnly.end () &&
std::find (afterOnly.begin (), afterOnly.end (), *name) == afterOnly.end ())
if (name != "uuid" &&
before.get (name) != after.get (name) &&
std::find (beforeOnly.begin (), beforeOnly.end (), name) == beforeOnly.end () &&
std::find (afterOnly.begin (), afterOnly.end (), name) == afterOnly.end ())
{
if (*name == "depends")
if (name == "depends")
{
std::vector <int> deps_before;
before.getDependencies (deps_before);
@@ -149,9 +145,9 @@ std::string taskDifferences (const Task& before, const Task& after)
else
out << " - "
<< format (STRING_FEEDBACK_ATT_MOD,
ucFirst (*name),
renderAttribute (*name, before.get (*name)),
renderAttribute (*name, after.get (*name)))
ucFirst (name),
renderAttribute (name, before.get (name)),
renderAttribute (name, after.get (name)))
<< "\n";
}
}
@@ -176,13 +172,12 @@ std::string taskInfoDifferences (
// Attributes are all there is, so figure the different attribute names
// between before and after.
std::vector <std::string> beforeAtts;
Task::const_iterator att;
for (att = before.begin (); att != before.end (); ++att)
beforeAtts.push_back (att->first);
for (auto& att : before)
beforeAtts.push_back (att.first);
std::vector <std::string> afterAtts;
for (att = after.begin (); att != after.end (); ++att)
afterAtts.push_back (att->first);
for (auto& att : after)
afterAtts.push_back (att.first);
std::vector <std::string> beforeOnly;
std::vector <std::string> afterOnly;
@@ -190,10 +185,9 @@ std::string taskInfoDifferences (
// Now start generating a description of the differences.
std::stringstream out;
std::vector <std::string>::iterator name;
for (name = beforeOnly.begin (); name != beforeOnly.end (); ++name)
for (auto& name : beforeOnly)
{
if (*name == "depends")
if (name == "depends")
{
std::vector <int> deps_before;
before.getDependencies (deps_before);
@@ -203,27 +197,27 @@ std::string taskInfoDifferences (
out << format (STRING_FEEDBACK_DEP_DEL, from)
<< "\n";
}
else if (name->substr (0, 11) == "annotation_")
else if (name.substr (0, 11) == "annotation_")
{
out << format (STRING_FEEDBACK_ANN_DEL, before.get (*name))
out << format (STRING_FEEDBACK_ANN_DEL, before.get (name))
<< "\n";
}
else if (*name == "start")
else if (name == "start")
{
out << format (STRING_FEEDBACK_ATT_DEL_DUR, ucFirst (*name),
out << format (STRING_FEEDBACK_ATT_DEL_DUR, ucFirst (name),
Duration (current_timestamp - last_timestamp).formatPrecise ())
<< "\n";
}
else
{
out << format (STRING_FEEDBACK_ATT_DEL, ucFirst (*name))
out << format (STRING_FEEDBACK_ATT_DEL, ucFirst (name))
<< "\n";
}
}
for (name = afterOnly.begin (); name != afterOnly.end (); ++name)
for (auto& name : afterOnly)
{
if (*name == "depends")
if (name == "depends")
{
std::vector <int> deps_after;
after.getDependencies (deps_after);
@@ -233,30 +227,31 @@ std::string taskInfoDifferences (
out << format (STRING_FEEDBACK_DEP_WAS_SET, to)
<< "\n";
}
else if (name->substr (0, 11) == "annotation_")
else if (name.substr (0, 11) == "annotation_")
{
out << format (STRING_FEEDBACK_ANN_ADD, after.get (*name))
out << format (STRING_FEEDBACK_ANN_ADD, after.get (name))
<< "\n";
}
else
{
if (*name == "start")
if (name == "start")
last_timestamp = current_timestamp;
out << format (STRING_FEEDBACK_ATT_WAS_SET,
ucFirst (*name),
renderAttribute (*name, after.get (*name), dateformat))
ucFirst (name),
renderAttribute (name, after.get (name), dateformat))
<< "\n";
}
}
for (name = beforeAtts.begin (); name != beforeAtts.end (); ++name)
if (*name != "uuid" &&
*name != "modified" &&
before.get (*name) != after.get (*name) &&
before.get (*name) != "" && after.get (*name) != "")
for (auto& name : beforeAtts)
if (name != "uuid" &&
name != "modified" &&
before.get (name) != after.get (name) &&
before.get (name) != "" &&
after.get (name) != "")
{
if (*name == "depends")
if (name == "depends")
{
std::vector <int> deps_before;
before.getDependencies (deps_before);
@@ -271,16 +266,16 @@ std::string taskInfoDifferences (
out << format (STRING_FEEDBACK_DEP_WAS_MOD, from, to)
<< "\n";
}
else if (name->substr (0, 11) == "annotation_")
else if (name.substr (0, 11) == "annotation_")
{
out << format (STRING_FEEDBACK_ANN_WAS_MOD, after.get (*name))
out << format (STRING_FEEDBACK_ANN_WAS_MOD, after.get (name))
<< "\n";
}
else
out << format (STRING_FEEDBACK_ATT_WAS_MOD,
ucFirst (*name),
renderAttribute (*name, before.get (*name), dateformat),
renderAttribute (*name, after.get (*name), dateformat))
ucFirst (name),
renderAttribute (name, before.get (name), dateformat),
renderAttribute (name, after.get (name), dateformat))
<< "\n";
}
@@ -397,24 +392,23 @@ void feedback_unblocked (const Task& task)
dependencyGetBlocked (task, blocked);
// Scan all the tasks that were blocked by this task
std::vector <Task>::iterator i;
for (i = blocked.begin (); i != blocked.end (); ++i)
for (auto& i : blocked)
{
std::vector <Task> blocking;
dependencyGetBlocking (*i, blocking);
dependencyGetBlocking (i, blocking);
if (blocking.size () == 0)
{
if (i->id)
if (i.id)
std::cout << format (STRING_FEEDBACK_UNBLOCKED,
i->id,
i->get ("description"))
i.id,
i.get ("description"))
<< "\n";
else
{
std::string uuid = i->get ("uuid");
std::string uuid = i.get ("uuid");
std::cout << format (STRING_FEEDBACK_UNBLOCKED,
i->get ("uuid"),
i->get ("description"))
i.get ("uuid"),
i.get ("description"))
<< "\n";
}
}
@@ -429,10 +423,9 @@ void feedback_backlog ()
context.verbose ("sync"))
{
std::vector <std::string> lines = context.tdb2.backlog.get_lines ();
std::vector <std::string>::iterator line;
for (line = lines.begin (); line != lines.end (); ++line)
for (auto& line : lines)
{
if ((*line)[0] == '{')
if ((line)[0] == '{')
{
context.footnote (STRING_FEEDBACK_BACKLOG);
break;
@@ -518,12 +511,11 @@ static void countTasks (
int& count_pending,
int& count_done)
{
std::vector <Task>::const_iterator it;
for (it = all.begin (); it != all.end (); ++it)
for (auto& it : all)
{
if (it->get ("project") == project)
if (it.get ("project") == project)
{
switch (it->getStatus ())
switch (it.getStatus ())
{
case Task::pending:
case Task::waiting: