Enhancement
- Broke the indentTree function into two pieces - one that processes a list, the other that processes a single item. This makes it more efficient for use places that have only one element.
This commit is contained in:
31
src/util.cpp
31
src/util.cpp
@@ -588,24 +588,25 @@ const std::vector<std::string> indentTree (
|
|||||||
std::vector <std::string> modified;
|
std::vector <std::string> modified;
|
||||||
std::vector <std::string>::const_iterator i;
|
std::vector <std::string>::const_iterator i;
|
||||||
for (i = values.begin (); i != values.end (); ++i)
|
for (i = values.begin (); i != values.end (); ++i)
|
||||||
{
|
modified.push_back (indentProject (*i, whitespace, delimiter));
|
||||||
// Count the delimiters in *i.
|
|
||||||
int count = 0;
|
|
||||||
std::string::size_type pos = 0;
|
|
||||||
while ((pos = i->find (delimiter, pos + 1)) != std::string::npos)
|
|
||||||
++count;
|
|
||||||
|
|
||||||
// Construct a prefix string which is a concatenated set of whitespace
|
|
||||||
// strings.
|
|
||||||
std::string prefix;
|
|
||||||
for (int indent = 0; indent < count; ++indent)
|
|
||||||
prefix += whitespace;
|
|
||||||
|
|
||||||
modified.push_back (prefix + *i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return modified;
|
return modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const std::string indentProject (
|
||||||
|
const std::string& project,
|
||||||
|
const std::string& whitespace /* = " " */,
|
||||||
|
char delimiter /* = '.' */)
|
||||||
|
{
|
||||||
|
// Count the delimiters in *i.
|
||||||
|
std::string prefix = "";
|
||||||
|
std::string::size_type pos = 0;
|
||||||
|
while ((pos = project.find (delimiter, pos + 1)) != std::string::npos)
|
||||||
|
prefix += whitespace;
|
||||||
|
|
||||||
|
return prefix + project;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,12 @@ const std::string escape (const std::string&, char);
|
|||||||
const std::vector<std::string> indentTree (
|
const std::vector<std::string> indentTree (
|
||||||
const std::vector<std::string>&,
|
const std::vector<std::string>&,
|
||||||
const std::string& whitespace = " ",
|
const std::string& whitespace = " ",
|
||||||
char delimiter='.');
|
char delimiter = '.');
|
||||||
|
|
||||||
|
const std::string indentProject (
|
||||||
|
const std::string&,
|
||||||
|
const std::string& whitespace = " ",
|
||||||
|
char delimiter = '.');
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ Context context;
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
int main (int argc, char** argv)
|
int main (int argc, char** argv)
|
||||||
{
|
{
|
||||||
UnitTest t (36);
|
UnitTest t (40);
|
||||||
|
|
||||||
// TODO bool confirm (const std::string&);
|
// TODO bool confirm (const std::string&);
|
||||||
// TODO int confirm3 (const std::string&);
|
// TODO int confirm3 (const std::string&);
|
||||||
@@ -129,6 +129,12 @@ int main (int argc, char** argv)
|
|||||||
t.is (structured[3], " one.four", "indentTree 'one.four' -> ' one.four'");
|
t.is (structured[3], " one.four", "indentTree 'one.four' -> ' one.four'");
|
||||||
t.is (structured[4], "two", "indentTree 'two' -> 'two'");
|
t.is (structured[4], "two", "indentTree 'two' -> 'two'");
|
||||||
|
|
||||||
|
// std::vector<std::string> indentProject (const std::string&, const std::string whitespace=" ", char delimiter='.');
|
||||||
|
t.is (indentProject (""), "", "indentProject '' -> ''");
|
||||||
|
t.is (indentProject ("one"), "one", "indentProject 'one' -> 'one'");
|
||||||
|
t.is (indentProject ("one.two"), " one.two", "indentProject 'one.two' -> ' one.two'");
|
||||||
|
t.is (indentProject ("one.two.three"), " one.two.three", "indentProject 'one.two.three' -> ' one.two.three'");
|
||||||
|
|
||||||
// TODO const std::string encode (const std::string& value);
|
// TODO const std::string encode (const std::string& value);
|
||||||
// TODO const std::string decode (const std::string& value);
|
// TODO const std::string decode (const std::string& value);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user