- /** The irc_char_traits class is used for RFC-style comparison of strings.
- * This class is used to implement irc::string, a case-insensitive, RFC-
- * comparing string class.
- */
- struct CoreExport irc_char_traits : public std::char_traits<char>
- {
- /** Check if two chars match.
- * @param c1st First character
- * @param c2nd Second character
- * @return true if the characters are equal
- */
- static bool eq(char c1st, char c2nd);
-
- /** Check if two chars do NOT match.
- * @param c1st First character
- * @param c2nd Second character
- * @return true if the characters are unequal
- */
- static bool ne(char c1st, char c2nd);
-
- /** Check if one char is less than another.
- * @param c1st First character
- * @param c2nd Second character
- * @return true if c1st is less than c2nd
- */
- static bool lt(char c1st, char c2nd);
-
- /** Compare two strings of size n.
- * @param str1 First string
- * @param str2 Second string
- * @param n Length to compare to
- * @return similar to strcmp, zero for equal, less than zero for str1
- * being less and greater than zero for str1 being greater than str2.
- */
- static int compare(const char* str1, const char* str2, size_t n);
-
- /** Find a char within a string up to position n.
- * @param s1 String to find in
- * @param n Position to search up to
- * @param c Character to search for
- * @return Pointer to the first occurance of c in s1
- */
- static const char* find(const char* s1, int n, char c);
- };
-
- /** This typedef declares irc::string based upon irc_char_traits.
- */
- typedef std::basic_string<char, irc_char_traits, std::allocator<char> > string;
-
- /** irc::stringjoiner joins string lists into a string, using
- * space as the separator.
- * This class can join a vector of std::string.
- */
- class CoreExport stringjoiner
- {
- private:
-
- /** Output string
- */
- std::string joined;
-
- public:
-
- /** Join all elements of a vector, in the resulting string
- * each element will be seperated by a single space character.
- * @param sequence Zero or more items to seperate
- */
- stringjoiner(const std::vector<std::string>& sequence);
-
- /** Get the joined sequence
- * @return A constant reference to the joined string
- */
- const std::string& GetJoined() const { return joined; }
- };
-
- /** irc::modestacker stacks mode sequences into a list.
- * It can then reproduce this list, clamped to a maximum of MAXMODES
- * values per line.
- */
- class CoreExport modestacker
- {
- private:
- /** The mode sequence and its parameters
- */
- std::deque<std::string> sequence;
-
- /** True if the mode sequence is initially adding
- * characters, false if it is initially removing
- * them
- */
- bool adding;
- public:
-
- /** Construct a new modestacker.
- * @param add True if the stack is adding modes,
- * false if it is removing them
- */
- modestacker(bool add);
-
- /** Push a modeletter and its parameter onto the stack.
- * No checking is performed as to if this mode actually
- * requires a parameter. If you stack invalid mode
- * sequences, they will be tidied if and when they are
- * passed to a mode parser.
- * @param modeletter The mode letter to insert
- * @param parameter The parameter for the mode
- */
- void Push(char modeletter, const std::string ¶meter);
-
- /** Push a modeletter without parameter onto the stack.
- * No checking is performed as to if this mode actually
- * requires a parameter. If you stack invalid mode
- * sequences, they will be tidied if and when they are
- * passed to a mode parser.
- * @param modeletter The mode letter to insert
- */
- void Push(char modeletter);
-
- /** Push a '+' symbol onto the stack.
- */
- void PushPlus();
-
- /** Push a '-' symbol onto the stack.
- */
- void PushMinus();
-
- /** Return zero or more elements which form the
- * mode line. This will be clamped to a max of
- * MAXMODES items (MAXMODES-1 mode parameters and
- * 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 vector to populate. This will not
- * be cleared before it is used.
- * @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::vector<std::string> &result, int max_line_size = 360);
-
- };
-
- /** irc::sepstream allows for splitting token seperated lists.