From 1524caf2f799cff54c2de330c9670a0b761ba3d8 Mon Sep 17 00:00:00 2001 From: danieldg Date: Sun, 13 Sep 2009 20:31:33 +0000 Subject: Simplify ModeHandler constructor git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11701 e03df62e-2008-0410-955e-edbf42e46eb7 --- include/channels.h | 3 +-- include/mode.h | 52 +++++++++++++++++++++++++--------------------------- include/u_listmode.h | 3 ++- 3 files changed, 28 insertions(+), 30 deletions(-) (limited to 'include') 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, @@ -94,22 +104,14 @@ typedef std::pair ModePair; 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 ¶meter, 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 ¶meter, 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); } -- cgit v1.2.3