diff options
-rw-r--r-- | include/hashcomp.h | 43 | ||||
-rw-r--r-- | src/Makefile | 8 | ||||
-rw-r--r-- | src/hashcomp.cpp | 55 |
3 files changed, 65 insertions, 41 deletions
diff --git a/include/hashcomp.h b/include/hashcomp.h index 0611cf239..42954fc37 100644 --- a/include/hashcomp.h +++ b/include/hashcomp.h @@ -1,9 +1,6 @@ #ifndef _HASHCOMP_H_ #define _HASHCOMP_H_ -#include "inspircd.h" -#include "inspircd_io.h" -#include "inspircd_util.h" #include "inspircd_config.h" #ifdef GCC3 @@ -28,12 +25,7 @@ namespace nspace template<> struct nspace::hash<in_addr> #endif { - size_t operator()(const struct in_addr &a) const - { - size_t q; - memcpy(&q,&a,sizeof(size_t)); - return q; - } + size_t operator()(const struct in_addr &a) const; }; #ifdef GCC34 template<> struct hash<string> @@ -41,14 +33,7 @@ namespace nspace template<> struct nspace::hash<string> #endif { - size_t operator()(const string &s) const - { - char a[MAXBUF]; - static struct hash<const char *> strhash; - strlcpy(a,s.c_str(),MAXBUF); - strlower(a); - return strhash(a); - } + size_t operator()(const string &s) const; }; } @@ -56,32 +41,12 @@ namespace nspace struct StrHashComp { - bool operator()(const string& s1, const string& s2) const - { - char a[MAXBUF],b[MAXBUF]; - strlcpy(a,s1.c_str(),MAXBUF); - strlcpy(b,s2.c_str(),MAXBUF); - strlower(a); - strlower(b); - return (strcasecmp(a,b) == 0); - } - + bool operator()(const string& s1, const string& s2) const; }; struct InAddr_HashComp { - - bool operator()(const in_addr &s1, const in_addr &s2) const - { - size_t q; - size_t p; - - memcpy(&q,&s1,sizeof(size_t)); - memcpy(&p,&s2,sizeof(size_t)); - - return (q == p); - } - + bool operator()(const in_addr &s1, const in_addr &s2) const; }; diff --git a/src/Makefile b/src/Makefile index 91d3333f1..7404fea5a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -9,10 +9,14 @@ CC = im a cheezeball CXXFLAGS = -I$../include ${FLAGS} -all: libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so inspircd +all: libIRCDhash.so libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so inspircd inspircd: inspircd.cpp ../include/base.h ../include/channels.h ../include/inspircd.h ../include/channels.h ../include/globals.h ../include/inspircd_config.h - $(CXX) -I../include $(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd $(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so + $(CXX) -I../include $(FLAGS) -rdynamic -L. inspircd.cpp -o inspircd $(LDLIBS) libIRCDchannels.so libIRCDmode.so libIRCDxline.so libIRCDstring.so libIRCDasyncdns.so libIRCDbase.so libIRCDutil.so libIRCDio.so libIRCDconnection.so libIRCDmessage.so libIRCDcommands.so libIRCDdnsqueue.so libIRCDdynamic.so libIRCDusers.so libIRCDmodules.so libIRCDwildcard.so libIRCDservers.so libIRCDhelper.so libIRCDhash.so + +libIRCDhash.so: hashcomp.cpp ../include/base.h ../include/hashcomp.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h + $(CC) -pipe -I../include $(FLAGS) -export-dynamic -c hashcomp.cpp + $(CC) -shared -o libIRCDhash.so hashcomp.o libIRCDhelper.so: helperfuncs.cpp ../include/base.h ../include/helperfuncs.h ../include/inspircd.h ../include/users.h ../include/globals.h ../include/inspircd_config.h $(CC) -pipe -I../include $(FLAGS) -export-dynamic -c helperfuncs.cpp diff --git a/src/hashcomp.cpp b/src/hashcomp.cpp new file mode 100644 index 000000000..ea845489f --- /dev/null +++ b/src/hashcomp.cpp @@ -0,0 +1,55 @@ +#include <string> +#include "inspircd.h" +#include "hashcomp.h" +#include "helperfuncs.h" +#ifdef GCC3 +#include <ext/hash_map> +#else +#include <hash_map> +#endif + +#ifdef GCC3 +#define nspace __gnu_cxx +#else +#define nspace std +#endif + +using namespace std; + +size_t nspace::hash<in_addr>::operator()(const struct in_addr &a) const +{ + size_t q; + memcpy(&q,&a,sizeof(size_t)); + return q; +} + +size_t nspace::hash<string>::operator()(const string &s) const +{ + char a[MAXBUF]; + static struct hash<const char *> strhash; + strlcpy(a,s.c_str(),MAXBUF); + strlower(a); + return strhash(a); +} + +bool StrHashComp::operator()(const string& s1, const string& s2) const +{ + char a[MAXBUF],b[MAXBUF]; + strlcpy(a,s1.c_str(),MAXBUF); + strlcpy(b,s2.c_str(),MAXBUF); + strlower(a); + strlower(b); + return (strcasecmp(a,b) == 0); +} + +bool InAddr_HashComp::operator()(const in_addr &s1, const in_addr &s2) const +{ + size_t q; + size_t p; + + memcpy(&q,&s1,sizeof(size_t)); + memcpy(&p,&s2,sizeof(size_t)); + + return (q == p); +} + |