- bool operator()(const std::string& s1, const std::string& s2) const;
- };
-
- /** 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 irc_char_traits : 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 CoreExport 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 CoreExport const char* find(const char* s1, int n, char c);
- };
-
- /** Compose a hex string from raw data.
- * @param raw The raw data to compose hex from
- * @param rawsz The size of the raw data buffer
- * @return The hex string.
- */
- CoreExport std::string hex(const unsigned char *raw, size_t rawsz);
-
- /** 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
- * the given seperator string.
- * This class can join a vector of std::string, a deque of
- * std::string, or a const char* const* array, using overloaded
- * constructors.
- */
- class CoreExport stringjoiner
- {
- private:
-
- /** Output string
- */
- std::string joined;
-
- public:
-
- /** Join elements of a vector, between (and including) begin and end
- * @param seperator The string to seperate values with
- * @param sequence One or more items to seperate
- * @param begin The starting element in the sequence to be joined
- * @param end The ending element in the sequence to be joined
- */
- stringjoiner(const std::string &seperator, const std::vector<std::string> &sequence, int begin, int end);
-
- /** Join elements of a deque, between (and including) begin and end
- * @param seperator The string to seperate values with
- * @param sequence One or more items to seperate
- * @param begin The starting element in the sequence to be joined
- * @param end The ending element in the sequence to be joined
- */
- stringjoiner(const std::string &seperator, const std::deque<std::string> &sequence, int begin, int end);
-
- /** Join elements of an array of char arrays, between (and including) begin and end
- * @param seperator The string to seperate values with
- * @param sequence One or more items to seperate
- * @param begin The starting element in the sequence to be joined
- * @param end The ending element in the sequence to be joined
- */
- stringjoiner(const std::string &seperator, const char* const* sequence, int begin, int end);
-
- /** Get the joined sequence
- * @return A reference to the joined string
- */
- std::string& GetJoined();