summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpippijn <pippijn@e03df62e-2008-0410-955e-edbf42e46eb7>2008-06-12 21:25:46 +0000
committerpippijn <pippijn@e03df62e-2008-0410-955e-edbf42e46eb7>2008-06-12 21:25:46 +0000
commit63ee682557f9d63daeaa17788923223b58f83452 (patch)
tree5606f9651b9e8aef3bc95d1246acb8b56442b18f
parent8a51d8969cd1b3800d15af8cf8dc6e15284da7aa (diff)
optimise string comparison.. this time I've done it right.. sheesh shitty C++ name lookup :-(
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9900 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--include/hashcomp.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/include/hashcomp.h b/include/hashcomp.h
index 6a6022a21..24d0af600 100644
--- a/include/hashcomp.h
+++ b/include/hashcomp.h
@@ -14,6 +14,7 @@
#ifndef _HASHCOMP_H_
#define _HASHCOMP_H_
+#include <cstring>
//#include "inspircd_config.h"
//#include "socket.h"
#include "hash_map.h"
@@ -620,6 +621,30 @@ inline bool operator!= (const std::string& leftval, const irc::string& rightval)
return !(leftval.c_str() == rightval);
}
+template<std::size_t N>
+static inline bool operator == (std::string const &lhs, char const (&rhs)[N])
+{
+ return lhs.length() == N - 1 && !std::memcmp(lhs.data(), rhs, N - 1);
+}
+
+template<std::size_t N>
+static inline bool operator != (std::string const &lhs, char const (&rhs)[N])
+{
+ return !(lhs == rhs);
+}
+
+template<std::size_t N>
+static inline bool operator == (irc::string const &lhs, char const (&rhs)[N])
+{
+ return lhs.length() == N - 1 && !std::memcmp(lhs.data(), rhs, N - 1);
+}
+
+template<std::size_t N>
+static inline bool operator != (irc::string const &lhs, char const (&rhs)[N])
+{
+ return !(lhs == rhs);
+}
+
/** Assign an irc::string to a std::string.
*/
inline std::string assign(const irc::string &other) { return other.c_str(); }