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
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifdef GCC3
00038 #include <ext/hash_map>
00039 #else
00040 #include <hash_map>
00041 #endif
00042
00043 #ifdef GCC3
00044 #define nspace __gnu_cxx
00045 #else
00046 #define nspace std
00047 #endif
00048
00049 using namespace std;
00050
00051 namespace nspace
00052 {
00053 #ifdef GCC34
00054 template<> struct hash<in_addr>
00055 #else
00056 template<> struct nspace::hash<in_addr>
00057 #endif
00058 {
00059 size_t operator()(const struct in_addr &a) const;
00060 };
00061 #ifdef GCC34
00062 template<> struct hash<string>
00063 #else
00064 template<> struct nspace::hash<string>
00065 #endif
00066 {
00067 size_t operator()(const string &s) const;
00068 };
00069 }
00070
00073 namespace irc
00074 {
00075
00080 struct StrHashComp
00081 {
00084 bool operator()(const std::string& s1, const std::string& s2) const;
00085 };
00086
00087
00092 struct InAddr_HashComp
00093 {
00096 bool operator()(const in_addr &s1, const in_addr &s2) const;
00097 };
00098
00099
00104 struct irc_char_traits : std::char_traits<char> {
00105
00108 static bool eq(char c1st, char c2nd);
00109
00112 static bool ne(char c1st, char c2nd);
00113
00116 static bool lt(char c1st, char c2nd);
00117
00120 static int compare(const char* str1, const char* str2, size_t n);
00121
00124 static const char* find(const char* s1, int n, char c);
00125 };
00126
00129 typedef basic_string<char, irc_char_traits, allocator<char> > string;
00130 }
00131
00132 #endif