]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/hashcomp.cpp
Remove leftover #ifdefs and #includes from cmd_*.cpp
[user/henk/code/inspircd.git] / src / hashcomp.cpp
index df03d0a58564d576d17cd2ecaa5fce865aaaceff..92de37e617ca1d3d0a999f47f35a01d702836534 100644 (file)
@@ -1,16 +1,25 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
  *
- *  InspIRCd: (C) 2002-2010 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
+ *   Copyright (C) 2009 Daniel De Graaf <danieldg@inspircd.org>
+ *   Copyright (C) 2005-2009 Craig Edwards <craigedwards@brainbox.cc>
+ *   Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
+ *   Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
  *
- * This program is free but copyrighted software; see
- *         the file COPYING for details.
+ * This file is part of InspIRCd.  InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
  *
- * ---------------------------------------------------
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+
 /* $Core */
 
 #include "inspircd.h"
@@ -144,7 +153,7 @@ void nspace::strlower(char *n)
 #if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED)
        size_t nspace::hash_compare<irc::string, std::less<irc::string> >::operator()(const irc::string &s) const
 #else
-       size_t CoreExport nspace::hash<irc::string>::operator()(const irc::string &s) const
+       size_t CoreExport irc::hash::operator()(const irc::string &s) const
 #endif
 {
        register size_t t = 0;
@@ -305,14 +314,23 @@ bool irc::sepstream::GetToken(std::string &token)
 {
        std::string::iterator lsp = last_starting_position;
 
-       for(; n != tokens.end(); ++n)
+       while (n != tokens.end())
        {
-               if(*n == sep || n+1 == tokens.end())
+               if ((*n == sep) || (n+1 == tokens.end()))
                {
                        last_starting_position = n+1;
-                       token = std::string(lsp, n+1 == tokens.end() ? ++n : n++);
-                       return true;
+                       token = std::string(lsp, n+1 == tokens.end() ? n+1  : n++);
+
+                       while ((token.length()) && (token.find_last_of(sep) == token.length() - 1))
+                               token.erase(token.end() - 1);
+
+                       if (token.empty())
+                               n++;
+
+                       return n == tokens.end() ? false : true;
                }
+
+               n++;
        }
 
        token = "";
@@ -326,7 +344,7 @@ const std::string irc::sepstream::GetRemaining()
 
 bool irc::sepstream::StreamEnd()
 {
-       return n == tokens.end();
+       return ((n + 1) == tokens.end());
 }
 
 irc::sepstream::~sepstream()
@@ -433,7 +451,7 @@ int irc::modestacker::GetStackedLine(std::vector<std::string> &result, int max_l
 irc::stringjoiner::stringjoiner(const std::string &seperator, const std::vector<std::string> &sequence, int begin, int end)
 {
        if (end < begin)
-               throw "stringjoiner logic error, this causes problems.";
+               return; // nothing to do here
 
        for (int v = begin; v < end; v++)
                joined.append(sequence[v]).append(seperator);
@@ -443,7 +461,7 @@ irc::stringjoiner::stringjoiner(const std::string &seperator, const std::vector<
 irc::stringjoiner::stringjoiner(const std::string &seperator, const std::deque<std::string> &sequence, int begin, int end)
 {
        if (end < begin)
-               throw "stringjoiner logic error, this causes problems.";
+               return; // nothing to do here
 
        for (int v = begin; v < end; v++)
                joined.append(sequence[v]).append(seperator);
@@ -453,7 +471,7 @@ irc::stringjoiner::stringjoiner(const std::string &seperator, const std::deque<s
 irc::stringjoiner::stringjoiner(const std::string &seperator, const char* const* sequence, int begin, int end)
 {
        if (end < begin)
-               throw "stringjoiner logic error, this causes problems.";
+               return; // nothing to do here
 
        for (int v = begin; v < end; v++)
                joined.append(sequence[v]).append(seperator);