]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/hashcomp.cpp
Stability fix
[user/henk/code/inspircd.git] / src / hashcomp.cpp
index 351dc1fd7651e1a546df286515e8fb454a9d8ae3..34f53ea288f9114a1026d41dedb18210e997a242 100644 (file)
@@ -178,44 +178,16 @@ std::istream& operator>>(std::istream &is, irc::string &str)
        return is;
 }
 
-irc::tokenstream::tokenstream(std::string &source) : tokens(source), last_pushed(false)
+irc::tokenstream::tokenstream(const std::string &source) : tokens(source), last_pushed(false)
 {
        last_starting_position = tokens.begin();
        n = tokens.begin();
-
-       /*for (std::string::iterator n = source.begin(); n != source.end(); n++)
-       {
-               if ((last_pushed) && (*n == ':'))
-               {
-                        * If we find a token thats not the first and starts with :,
-                        * this is the last token on the line
-                        *
-                       tokens.push_back(new std::string(n+1, source.end()));
-                       break;
-               }
-
-               last_pushed = false;
-
-               if ((*n == ' ') || (n+1 == source.end()))
-               {
-                       * If we find a space, or end of string, this is the end of a token.
-                       
-                       tokens.push_back(new std::string(last_starting_position, n+1 == source.end() ? n+1  : n));
-                       last_starting_position = n+1;
-                       last_pushed = true;
-               }
-       }*/
 }
 
 irc::tokenstream::~tokenstream()
 {
 }
 
-/*unsigned int irc::tokenstream::GetNumTokens()
-{
-       return tokens.size();
-}*/
-
 const std::string irc::tokenstream::GetToken()
 {
        std::string::iterator lsp = last_starting_position;
@@ -227,7 +199,9 @@ const std::string irc::tokenstream::GetToken()
                        /* If we find a token thats not the first and starts with :,
                         * this is the last token on the line
                         */
-                       return std::string(n+1, tokens.end());
+                       std::string::iterator curr = ++n;
+                       n = tokens.end();
+                       return std::string(curr, tokens.end());
                }
 
                last_pushed = false;
@@ -246,3 +220,30 @@ const std::string irc::tokenstream::GetToken()
        return "";
 }
 
+irc::commasepstream::commasepstream(const std::string &source) : tokens(source)
+{
+       last_starting_position = tokens.begin();
+       n = tokens.begin();
+}
+
+const std::string irc::commasepstream::GetToken()
+{
+       std::string::iterator lsp = last_starting_position;
+
+       while (n != tokens.end())
+       {
+               if ((*n == ',') || (n+1 == tokens.end()))
+               {
+                       last_starting_position = n+1;
+                       return std::string(lsp, n+1 == tokens.end() ? n+1  : n++);
+               }
+
+               n++;
+       }
+
+       return "";
+}
+
+irc::commasepstream::~commasepstream()
+{
+}