]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/hashcomp.h
Refactor port binding, warning not yet tested fully
[user/henk/code/inspircd.git] / include / hashcomp.h
index 3ee89ca04c8c50ec646b7026a749ee913e87f106..b903f774885540c407b36f54faa2f6e42b4b5f8f 100644 (file)
@@ -2,12 +2,9 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
- *                       E-mail:
- *                <brain@chatspike.net>
- *                <Craig@chatspike.net>
+ *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * See: http://www.inspircd.org/wiki/index.php/Credits
  *
- * Written by Craig Edwards, Craig McLure, and others.
  * This program is free but copyrighted software; see
  *            the file COPYING for details.
  *
@@ -39,7 +36,6 @@
 using namespace std;
 using irc::sockets::insp_aton;
 using irc::sockets::insp_ntoa;
-using irc::sockets::insp_inaddr;
 
 #ifndef LOWERMAP
 #define LOWERMAP
@@ -72,17 +68,6 @@ namespace nspace
         */
        void strlower(char *n);
 
-       /** Hashing function to hash insp_inaddr structs
-        */
-        template<> struct hash<insp_inaddr>
-        {
-               /** Hash an insp_inaddr
-                * @param a An insp_inaddr to hash
-                * @return The hash value
-                */
-                size_t operator()(const insp_inaddr &a) const;
-        };
-
        /** Hashing function to hash std::string without respect to case
         */
         template<> struct hash<std::string>
@@ -112,17 +97,6 @@ namespace irc
        };
 
 
-       /** This class returns true if two insp_inaddr structs match.
-        * Checking is done by copying both into a size_t then doing a
-        * numeric comparison of the two.
-        */
-       struct InAddr_HashComp
-       {
-               /** The operator () does the actual comparison in hash_map
-                */
-               bool operator()(const insp_inaddr &s1, const insp_inaddr &s2) const;
-       };
-
        /** irc::stringjoiner joins string lists into a string, using
         * the given seperator string.
         * This class can join a vector of std::string, a deque of
@@ -211,12 +185,20 @@ namespace irc
                /** Return zero or more elements which form the
                 * mode line. This will be clamped to a max of
                 * MAXMODES+1 items (MAXMODES mode parameters and
-                * one mode sequence string).
+                * one mode sequence string), and max_line_size
+                * characters. As specified below, this function
+                * should be called in a loop until it returns zero,
+                * indicating there are no more modes to return.
                 * @param result The deque to populate. This will
                 * be cleared before it is used.
-                * @return The number of elements in the deque
-                */
-               int GetStackedLine(std::deque<std::string> &result);
+                * @param max_line_size The maximum size of the line
+                * to build, in characters, seperate to MAXMODES.
+                * @return The number of elements in the deque.
+                * The function should be called repeatedly until it
+                * returns 0, in case there are multiple lines of
+                * mode changes to be obtained.
+                */
+               int GetStackedLine(std::deque<std::string> &result, int max_line_size = 360);
        };
 
        /** irc::tokenstream reads a string formatted as per RFC1459 and RFC2812.
@@ -255,7 +237,7 @@ namespace irc
                /** Fetch the next token from the stream
                 * @return The next token is returned, or an empty string if none remain
                 */
-               const std::string GetToken();
+               bool GetToken(std::string &token);
        };
 
        /** irc::sepstream allows for splitting token seperated lists.
@@ -288,6 +270,16 @@ namespace irc
                 * @return The next token is returned, or an empty string if none remain
                 */
                virtual const std::string GetToken();
+               
+               /** Fetch the entire remaining stream, without tokenizing
+                * @return The remaining part of the stream
+                */
+               virtual const std::string GetRemaining();
+               
+               /** Returns true if the end of the stream has been reached
+                * @return True if the end of the stream has been reached, otherwise false
+                */
+               virtual bool StreamEnd();
        };
 
        /** A derived form of sepstream, which seperates on commas
@@ -430,6 +422,7 @@ namespace irc
                 * more than 32 entries with Allocate().
                 */
                unsigned char* bits;
+        protected:
                /** Current set size (size of freebits and bits).
                 * Both freebits and bits will ALWAYS be the
                 * same length.
@@ -523,7 +516,7 @@ namespace irc
         */
        typedef basic_string<char, irc_char_traits, allocator<char> > string;
 
-       const char* Spacify(char* n);
+       const char* Spacify(const char* n);
 }
 
 /* Define operators for using >> and << with irc::string to an ostream on an istream. */
@@ -537,7 +530,21 @@ std::istream& operator>>(std::istream &is, irc::string &str);
  */
 std::string operator+ (std::string& leftval, irc::string& rightval);
 irc::string operator+ (irc::string& leftval, std::string& rightval);
-bool operator== (std::string& leftval, irc::string& rightval);
-bool operator== (irc::string& leftval, std::string& rightval);
+bool operator== (const std::string& leftval, const irc::string& rightval);
+bool operator== (const irc::string& leftval, const std::string& rightval);
+
+std::string assign(const irc::string &other);
+irc::string assign(const std::string &other);
+std::string& trim(std::string &str);
+
+namespace nspace
+{
+       /** Hashing function to hash irc::string
+        */
+       template<> struct hash<irc::string>
+       {
+               size_t operator()(const irc::string &s) const;
+       };
+}
 
 #endif