]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/mode.h
Remove an extern, partly because it's unused, partly because it then gets shadowed...
[user/henk/code/inspircd.git] / include / mode.h
index cfac562e6b8be953ff73a9b3722ffbade102b8f1..d09d62439fc342a4121c6757dad3732d93ea6ad6 100644 (file)
@@ -45,36 +45,26 @@ enum ModeAction {
        MODEACTION_ALLOW = 1 /* Allow the mode */
 };
 
-class ModeOutput
-{
- private:
-       std::string par;
-       ModeAction act;
- public:
-       ModeOutput(std::string parameter, ModeAction action);
-       ModeAction GetAction();
-       std::string& GetParameter();
-};
-
 class ModeHandler
 {
        char mode;
-       int n_params;
+       int n_params_on;
+       int n_params_off;
        bool list;
        ModeType m_type;
        bool oper;
 
  public:
-       ModeHandler(char modeletter, int parameters, bool listmode, ModeType type, bool operonly);
+       ModeHandler(char modeletter, int parameters_on, int parameters_off, bool listmode, ModeType type, bool operonly);
        virtual ~ModeHandler();
 
        bool IsListMode();
        ModeType GetModeType();
        bool NeedsOper();
-       int GetNumParams();
+       int GetNumParams(bool adding);
        char GetModeChar();
 
-       virtual ModeOutput OnModeChange(userrec* source, userrec* dest, chanrec* channel, const std::string &parameter, bool adding);
+       virtual ModeAction OnModeChange(userrec* source, userrec* dest, chanrec* channel, std::string &parameter, bool adding); /* Can change the mode parameter as its a ref */
        virtual void DisplayList(userrec* user, chanrec* channel);
        virtual bool CheckTimeStamp(time_t theirs, time_t ours, const std::string &their_param, const std::string &our_param, chanrec* channel);
 };
@@ -91,13 +81,25 @@ class ModeWatcher
        char GetModeChar();
        ModeType GetModeType();
 
-       virtual bool BeforeMode(userrec* source, userrec* dest, chanrec* channel, const std::string &parameter, bool adding);
-       virtual void AfterMode(userrec* source, userrec* dest, chanrec* channel, const std::string &parameter, bool adding);
+       virtual bool BeforeMode(userrec* source, userrec* dest, chanrec* channel, std::string &parameter, bool adding, ModeType type); /* Can change the mode parameter */
+       virtual void AfterMode(userrec* source, userrec* dest, chanrec* channel, const std::string &parameter, bool adding, ModeType type);
 };
 
+typedef std::vector<ModeWatcher*>::iterator ModeWatchIter;
+
 class ModeParser
 {
  private:
+       /**
+        * Mode handlers for each mode, to access a handler subtract
+        * 65 from the ascii value of the mode letter.
+        */
+       ModeHandler* modehandlers[64];
+       /**
+        * Mode watcher classes
+        */
+       std::vector<ModeWatcher*> modewatchers[64];
+       
        char* GiveOps(userrec *user,char *dest,chanrec *chan,int status);
        char* GiveHops(userrec *user,char *dest,chanrec *chan,int status);
        char* GiveVoice(userrec *user,char *dest,chanrec *chan,int status);
@@ -110,6 +112,8 @@ class ModeParser
        char* Grant(userrec *d,chanrec *chan,int MASK);
        char* Revoke(userrec *d,chanrec *chan,int MASK);
  public:
+       void Process(char **parameters, int pcnt, userrec *user, bool servermode);
+
        std::string CompressModes(std::string modes,bool channelmodes);
        void ProcessModes(char **parameters,userrec* user,chanrec *chan,int status, int pcnt, bool servermode, bool silent, bool local);
        bool AllowedUmode(char umode, char* sourcemodes,bool adding,bool serveroverride);