summaryrefslogtreecommitdiff
path: root/src/hashcomp.cpp
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-08-23 18:06:26 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-08-23 18:06:26 +0000
commitdeb85740798d3438563628736c0e83edb6966b6e (patch)
treea8ad119fa9d1624a174cded210aba05a1af36173 /src/hashcomp.cpp
parent3f3d3d302899aacf8b49fcc871265c965d1fb0fc (diff)
Add some stuff to change how we process a token sepeperated stream
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7800 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/hashcomp.cpp')
-rw-r--r--src/hashcomp.cpp28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/hashcomp.cpp b/src/hashcomp.cpp
index b5740d95b..49befd634 100644
--- a/src/hashcomp.cpp
+++ b/src/hashcomp.cpp
@@ -245,32 +245,31 @@ irc::sepstream::sepstream(const std::string &source, char seperator) : tokens(so
n = tokens.begin();
}
-const std::string irc::sepstream::GetToken()
+bool irc::sepstream::GetToken(std::string &token)
{
std::string::iterator lsp = last_starting_position;
while (n != tokens.end())
{
- /** Skip multi seps, converting "<sep><sep>" into "<sep>"
- */
- while ((n+1 != tokens.end()) && (*n == sep) && (*(n+1) == sep))
- n++;
-
if ((*n == sep) || (n+1 == tokens.end()))
{
last_starting_position = n+1;
- std::string strip = std::string(lsp, n+1 == tokens.end() ? n+1 : n++);
+ token = std::string(lsp, n+1 == tokens.end() ? n+1 : n++);
- while ((strip.length()) && (strip.find_last_of(sep) == strip.length() - 1))
- strip.erase(strip.end() - 1);
+ while ((token.length()) && (token.find_last_of(sep) == token.length() - 1))
+ token.erase(token.end() - 1);
- return strip;
+ if (token.empty())
+ n++;
+
+ return n == tokens.end() ? false : true;
}
n++;
}
- return "";
+ token = "";
+ return false;
}
const std::string irc::sepstream::GetRemaining()
@@ -458,16 +457,15 @@ long irc::portparser::GetToken()
in_range = 0;
}
- std::string x = sep->GetToken();
+ std::string x;
+ sep->GetToken(x);
if (x.empty())
return 0;
while (Overlaps(atoi(x.c_str())))
{
- x = sep->GetToken();
-
- if (x.empty())
+ if (!sep->GetToken(x))
return 0;
}