]> 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 d107df3093efd5cbe51a236eab2a3ac6b64f46c4..34f53ea288f9114a1026d41dedb18210e997a242 100644 (file)
@@ -21,17 +21,9 @@ using namespace std;
 #include <string>
 #include "hashcomp.h"
 #include "helperfuncs.h"
-#ifdef GCC3
 #include <ext/hash_map>
-#else
-#include <hash_map>
-#endif
 
-#ifdef GCC3
 #define nspace __gnu_cxx
-#else
-#define nspace std
-#endif
 
 // from helperfuncs.cpp
 extern const char lowermap[255];
@@ -185,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()
+{
+}