]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/hashcomp.cpp
Fixed to dynamically allocate the fieldlist
[user/henk/code/inspircd.git] / src / hashcomp.cpp
index 3271e599cda9dfa3e2cd3daebf1fbd5794af9dba..34f53ea288f9114a1026d41dedb18210e997a242 100644 (file)
@@ -177,3 +177,73 @@ std::istream& operator>>(std::istream &is, irc::string &str)
        str = tmp.c_str();
        return is;
 }
+
+irc::tokenstream::tokenstream(const std::string &source) : tokens(source), last_pushed(false)
+{
+       last_starting_position = tokens.begin();
+       n = tokens.begin();
+}
+
+irc::tokenstream::~tokenstream()
+{
+}
+
+const std::string irc::tokenstream::GetToken()
+{
+       std::string::iterator lsp = last_starting_position;
+
+       while (n != tokens.end())
+       {
+               if ((last_pushed) && (*n == ':'))
+               {
+                       /* If we find a token thats not the first and starts with :,
+                        * this is the last token on the line
+                        */
+                       std::string::iterator curr = ++n;
+                       n = tokens.end();
+                       return std::string(curr, tokens.end());
+               }
+
+               last_pushed = false;
+
+               if ((*n == ' ') || (n+1 == tokens.end()))
+               {
+                       /* If we find a space, or end of string, this is the end of a token.
+                        */
+                       last_starting_position = n+1;
+                       last_pushed = true;
+                       return std::string(lsp, n+1 == tokens.end() ? n+1  : n++);
+               }
+
+               n++;
+       }
+       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()
+{
+}