summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-09-13 20:31:33 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-09-13 20:31:33 +0000
commit1524caf2f799cff54c2de330c9670a0b761ba3d8 (patch)
tree45fffe020b28782a087925c94fb5195fb9b4796b /include
parent7892c8a0313c50d8138942ff3b112691caf05a2f (diff)
Simplify ModeHandler constructor
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11701 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'include')
-rw-r--r--include/channels.h3
-rw-r--r--include/mode.h52
-rw-r--r--include/u_listmode.h3
3 files changed, 28 insertions, 30 deletions
diff --git a/include/channels.h b/include/channels.h
index f71ad53a3..7b6999316 100644
--- a/include/channels.h
+++ b/include/channels.h
@@ -406,10 +406,9 @@ class CoreExport Channel : public Extensible
* the channel (to grant ops to them)
* @param user The user to associate the privilage with
* @param prefix The prefix character to associate
- * @param prefix_rank The rank (value) of this prefix character
* @param adding True if adding the prefix, false when removing
*/
- void SetPrefix(User* user, char prefix, unsigned int prefix_rank, bool adding);
+ void SetPrefix(User* user, char prefix, bool adding);
/** Check if a user is banned on this channel
* @param user A user to check against the banlist
diff --git a/include/mode.h b/include/mode.h
index 7f3ef34a7..0c367a1c2 100644
--- a/include/mode.h
+++ b/include/mode.h
@@ -70,6 +70,16 @@ enum PrefixModeValue
OP_VALUE = 30000
};
+enum ParamSpec
+{
+ /** No parameters */
+ PARAM_NONE,
+ /** Parameter required on mode setting only */
+ PARAM_SETONLY,
+ /** Parameter always required */
+ PARAM_ALWAYS
+};
+
/**
* Used by ModeHandler::ModeSet() to return the state of a mode upon a channel or user.
* The pair contains an activity flag, true if the mode is set with the given parameter,
@@ -95,21 +105,13 @@ class CoreExport ModeHandler : public classbase
{
protected:
/**
- * Creator/owner pointer
- */
- InspIRCd* ServerInstance;
- /**
* The mode letter you're implementing.
*/
char mode;
- /**
- * Number of parameters when being set
- */
- int n_params_on;
- /**
- * Number of parameters when being unset
+
+ /** What kind of parameters does the mode take?
*/
- int n_params_off;
+ ParamSpec parameters_taken;
/**
* Mode is a 'list' mode. The behaviour
* of your mode is now set entirely within
@@ -147,9 +149,10 @@ class CoreExport ModeHandler : public classbase
/** The prefix char needed on channel to use this mode,
* only checked for channel modes
*/
- char prefixneeded;
+ int levelrequired;
public:
+ static InspIRCd* ServerInstance;
/** Module that created this mode. NULL for core modes */
Module* creator;
@@ -169,11 +172,8 @@ class CoreExport ModeHandler : public classbase
* and the rank values OP_VALUE, HALFOP_VALUE and VOICE_VALUE respectively. Any prefixes you define should have unique values proportional
* to these three defaults or proportional to another mode in a module you depend on. See src/cmode_o.cpp as an example.
* @param prefixrequired The prefix required to change this mode
- * @param translate The translation type for the argument(s) of this mode
*/
- ModeHandler(InspIRCd* Instance, Module* me, char modeletter, int parameters_on, int parameters_off,
- bool listmode, ModeType type, bool operonly, char mprefix = 0,
- char prefixrequired = '%', TranslateType translate = TR_TEXT);
+ ModeHandler(Module* me, char modeletter, ParamSpec params, ModeType type);
/**
* The default destructor does nothing
*/
@@ -187,7 +187,7 @@ class CoreExport ModeHandler : public classbase
* also implement GetPrefixRank() to return an integer
* value for this mode prefix.
*/
- char GetPrefix();
+ inline char GetPrefix() const { return prefix; }
/** Get number of items with this mode set on them
*/
virtual unsigned int GetCount();
@@ -205,15 +205,15 @@ class CoreExport ModeHandler : public classbase
/**
* Returns the mode's type
*/
- ModeType GetModeType();
+ inline ModeType GetModeType() const { return m_type; }
/**
* Returns the mode's parameter translation type
*/
- TranslateType GetTranslateType();
+ inline TranslateType GetTranslateType() const { return m_paramtype; }
/**
* Returns true if the mode can only be set/unset by an oper
*/
- bool NeedsOper();
+ inline bool NeedsOper() const { return oper; }
/**
* Returns the number of parameters for the mode. Any non-zero
* value should be considered to be equivalent to one.
@@ -313,10 +313,8 @@ class CoreExport ModeHandler : public classbase
* @param channel The channel which the server wants to remove your mode from
*/
virtual void RemoveMode(Channel* channel, irc::modestacker* stack = NULL);
-
- char GetNeededPrefix();
-
- void SetNeededPrefix(char needsprefix);
+
+ inline unsigned int GetLevelRequired() const { return levelrequired; }
};
/** A prebuilt mode handler which handles a simple user mode, e.g. no parameters, usable by any user, with no extra
@@ -327,8 +325,8 @@ class CoreExport ModeHandler : public classbase
class CoreExport SimpleUserModeHandler : public ModeHandler
{
public:
- SimpleUserModeHandler(InspIRCd* Instance, Module* Creator, char modeletter)
- : ModeHandler(Instance, Creator, modeletter, 0, 0, false, MODETYPE_USER, false) {}
+ SimpleUserModeHandler(Module* Creator, char modeletter)
+ : ModeHandler(Creator, modeletter, PARAM_NONE, MODETYPE_USER) {}
virtual ~SimpleUserModeHandler() {}
virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
};
@@ -342,7 +340,7 @@ class CoreExport SimpleChannelModeHandler : public ModeHandler
{
public:
SimpleChannelModeHandler(InspIRCd* Instance, Module* Creator, char modeletter)
- : ModeHandler(Instance, Creator, modeletter, 0, 0, false, MODETYPE_CHANNEL, false) {}
+ : ModeHandler(Creator, modeletter, PARAM_NONE, MODETYPE_CHANNEL) {}
virtual ~SimpleChannelModeHandler() {}
virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string &parameter, bool adding);
};
diff --git a/include/u_listmode.h b/include/u_listmode.h
index 9d9b5f836..4b8ffe9e0 100644
--- a/include/u_listmode.h
+++ b/include/u_listmode.h
@@ -142,10 +142,11 @@ class ListModeBase : public ModeHandler
* @param ctag Configuration tag to get limits from
*/
ListModeBase(InspIRCd* Instance, Module* Creator, char modechar, const std::string &eolstr, unsigned int lnum, unsigned int eolnum, bool autotidy, const std::string &ctag = "banlist")
- : ModeHandler(Instance, Creator, modechar, 1, 1, true, MODETYPE_CHANNEL, false),
+ : ModeHandler(Creator, modechar, PARAM_ALWAYS, MODETYPE_CHANNEL),
listnumeric(lnum), endoflistnumeric(eolnum), endofliststring(eolstr), tidy(autotidy),
configtag(ctag), extItem("listbase_mode_" + std::string(1, mode) + "_list", Creator)
{
+ list = true;
this->DoRehash();
Extensible::Register(&extItem);
}