summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-07-25 17:36:13 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-07-25 17:36:13 +0000
commit529f16e84b4ba1328a13be32e40a71156c4725f8 (patch)
tree0300f14ecebfe13389a5fe4418e051191dff9f26
parent89bc1282b9e1e2bf9eccacae8f1dc2b5f9ade9b7 (diff)
Shorthand macros DEFINE_HANDLER1()...DEFINE_HANDLER9() to save on defining functor classes that just implement Call()
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7569 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--include/caller.h9
-rw-r--r--include/inspircd.h25
-rw-r--r--src/inspircd.cpp4
-rw-r--r--src/modules.cpp4
4 files changed, 19 insertions, 23 deletions
diff --git a/include/caller.h b/include/caller.h
index 9f251d16c..396a5ba5a 100644
--- a/include/caller.h
+++ b/include/caller.h
@@ -237,5 +237,14 @@ template <typename ReturnType, typename Param1, typename Param2, typename Param3
}
};
+#define DEFINE_HANDLER0(NAME, RETURN) \
+ class CoreExport NAME : public HandlerBase0<RETURN> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(); };
+
+#define DEFINE_HANDLER1(NAME, RETURN, V1) \
+ class CoreExport NAME : public HandlerBase1<RETURN, V1> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V1); };
+
+#define DEFINE_HANDLER2(NAME, RETURN, V1, V2) \
+ class CoreExport NAME : public HandlerBase2<RETURN, V1, V2> { InspIRCd* Server; public: NAME(InspIRCd* Srv) : Server(Srv) { } virtual ~NAME() { } virtual RETURN Call(V2); };
+
#endif
diff --git a/include/inspircd.h b/include/inspircd.h
index c2ea3f048..13b66ade7 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -239,24 +239,9 @@ typedef std::map<irc::string, unsigned int> clonemap;
class InspIRCd;
-class CoreExport IsNickHandler : public HandlerBase1<bool, const char*>
-{
- InspIRCd* Server;
- public:
- IsNickHandler(InspIRCd* Srv) : Server(Srv) { }
- virtual ~IsNickHandler() { }
- virtual bool Call(const char*);
-};
-
-class CoreExport IsIdentHandler : public HandlerBase1<bool, const char*>
-{
- InspIRCd* Server;
- public:
- IsIdentHandler(InspIRCd* Srv) : Server(Srv) { }
- virtual ~IsIdentHandler() { }
- virtual bool Call(const char*);
-};
-
+DEFINE_HANDLER1(IsNickHandler, bool, const char*);
+DEFINE_HANDLER1(IsIdentHandler, bool, const char*);
+DEFINE_HANDLER1(FindDescriptorHandler, userrec*, int);
/* Forward declaration - required */
class XLineManager;
@@ -399,8 +384,8 @@ class CoreExport InspIRCd : public classbase
/**** Functors ****/
IsNickHandler HandleIsNick;
-
IsIdentHandler HandleIsIdent;
+ FindDescriptorHandler HandleFindDescriptor;
/** InspSocket classes pending deletion after being closed.
* We don't delete these immediately as this may cause a segmentation fault.
@@ -886,7 +871,7 @@ class CoreExport InspIRCd : public classbase
* @param socket The file descriptor of a user
* @return A pointer to the user if the user exists locally on this descriptor
*/
- userrec* FindDescriptor(int socket);
+ caller1<userrec*, int> FindDescriptor;
/** Add a new mode to this server's mode parser
* @param mh The modehandler to add
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index dea2f0a58..449bb005b 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -396,8 +396,10 @@ InspIRCd::InspIRCd(int argc, char** argv)
GlobalCulls(this),
HandleIsNick(this),
HandleIsIdent(this),
+ HandleFindDescriptor(this),
IsNick(&HandleIsNick),
- IsIdent(&HandleIsIdent)
+ IsIdent(&HandleIsIdent),
+ FindDescriptor(&HandleFindDescriptor)
{
int found_ports = 0;
FailedPortList pl;
diff --git a/src/modules.cpp b/src/modules.cpp
index 720de3b96..28d746323 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -755,9 +755,9 @@ void InspIRCd::DumpText(userrec* User, const std::string &LinePrefix, stringstre
User->WriteServ(CompleteLine);
}
-userrec* InspIRCd::FindDescriptor(int socket)
+userrec* FindDescriptorHandler::Call(int socket)
{
- return reinterpret_cast<userrec*>(this->SE->GetRef(socket));
+ return reinterpret_cast<userrec*>(Server->SE->GetRef(socket));
}
bool InspIRCd::AddMode(ModeHandler* mh, const unsigned char mode)