00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _HASHCOMP_H_
00018 #define _HASHCOMP_H_
00019
00020 #include "inspircd_config.h"
00021
00022 #ifdef GCC3
00023 #include <ext/hash_map>
00024 #else
00025 #include <hash_map>
00026 #endif
00027
00028 #ifdef GCC3
00029 #define nspace __gnu_cxx
00030 #else
00031 #define nspace std
00032 #endif
00033
00034 using namespace std;
00035
00036 namespace nspace
00037 {
00038 #ifdef GCC34
00039 template<> struct hash<in_addr>
00040 #else
00041 template<> struct nspace::hash<in_addr>
00042 #endif
00043 {
00044 size_t operator()(const struct in_addr &a) const;
00045 };
00046 #ifdef GCC34
00047 template<> struct hash<string>
00048 #else
00049 template<> struct nspace::hash<string>
00050 #endif
00051 {
00052 size_t operator()(const string &s) const;
00053 };
00054 }
00055
00060 struct StrHashComp
00061 {
00064 bool operator()(const string& s1, const string& s2) const;
00065 };
00066
00071 struct InAddr_HashComp
00072 {
00075 bool operator()(const in_addr &s1, const in_addr &s2) const;
00076 };
00077
00080 namespace irc
00081 {
00086 struct irc_char_traits : std::char_traits<char> {
00087
00090 static bool eq(char c1st, char c2nd);
00091
00094 static bool ne(char c1st, char c2nd);
00095
00098 static bool lt(char c1st, char c2nd);
00099
00102 static int compare(const char* str1, const char* str2, size_t n);
00103
00106 static const char* find(const char* s1, int n, char c);
00107 };
00108
00111 typedef basic_string<char, irc_char_traits, allocator<char> > string;
00112 }
00113
00114 #endif