]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/channels.h
Change Extensible to use strongly typed entries
[user/henk/code/inspircd.git] / include / channels.h
index afcdee41f08fe14822fb44016fe338792d0e597b..dfbe06c270a26eab1a450f558ff1b0260e966826 100644 (file)
@@ -29,6 +29,7 @@ enum ChannelModes {
 
 /* Forward declarations - needed */
 class User;
+struct ModResult;
 
 /** Holds an entry for a ban list, exemption list, or invite list.
  * This class contains a single element in a channel list, such as a banlist.
@@ -74,7 +75,7 @@ typedef CUList::const_iterator CUListConstIter;
 
 /** A list of custom modes parameters on a channel
  */
-typedef std::map<char,char*> CustomModeList;
+typedef std::map<char,std::string> CustomModeList;
 
 
 /** used to hold a channel and a users modes on that channel, e.g. +v, +h, +o
@@ -111,7 +112,7 @@ class CoreExport Channel : public Extensible
 
        /** Connect a Channel to a User
         */
-       static Channel* ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const std::string &privs, bool bursting);
+       static Channel* ForceChan(InspIRCd* Instance, Channel* Ptr, User* user, const std::string &privs, bool bursting, bool created);
 
        /** Set default modes for the channel on creation
         */
@@ -136,6 +137,10 @@ class CoreExport Channel : public Extensible
         */
        std::string name; /* CHANMAX */
 
+       /** Time that the object was instantiated (used for TS calculation etc)
+       */
+       time_t age;
+
        /** Modes for the channel.
         * This is not a null terminated string! It is a bitset where
         * each item in it represents if a mode is set. For example
@@ -202,18 +207,19 @@ class CoreExport Channel : public Extensible
         */
        void SetMode(char mode,bool mode_on);
 
-       /** Sets or unsets the parameters for a custom mode in a channels info
+       /** Sets or unsets a custom mode in the channels info
         * @param mode The mode character to set or unset
-        * @param parameter The parameter string to associate with this mode character
-        * @param mode_on True if you want to set the mode or false if you want to remove it
+        * @param parameter The parameter string to associate with this mode character.
+        * If it is empty, the mode is unset; if it is nonempty, the mode is set.
         */
-       void SetModeParam(char mode,const char* parameter,bool mode_on);
+       void SetModeParam(char mode, std::string parameter);
 
        /** Returns true if a mode is set on a channel
          * @param mode The mode character you wish to query
          * @return True if the custom mode is set, false if otherwise
          */
-       bool IsModeSet(char mode);
+       inline bool IsModeSet(char mode) { return modes[mode-'A']; }
+
 
        /** Returns the parameter for a custom mode on a channel.
          * @param mode The mode character you wish to query
@@ -336,7 +342,7 @@ class CoreExport Channel : public Extensible
         * @return The number of users left on the channel. If this is zero
         * when the method returns, you MUST delete the Channel immediately!
         */
-       long ServerKickUser(User* user, const char* reason, bool triggerevents, const char* servername = NULL);
+       long ServerKickUser(User* user, const char* reason, const char* servername = NULL);
 
        /** Part a user from this channel with the given reason.
         * If the reason field is NULL, no reason will be sent.
@@ -425,6 +431,8 @@ class CoreExport Channel : public Extensible
         * @param text A std::string containing the output line without prefix
         */
        void WriteAllExcept(User* user, bool serversource, char status, CUList &except_list, const std::string& text);
+       /** Write a line of text that already includes the source */
+       void RawWriteAllExcept(User* user, bool serversource, char status, CUList &except_list, const std::string& text);
 
        /** Returns the maximum number of bans allowed to be set on this channel
         * @return The maximum number of bans allowed
@@ -524,14 +532,12 @@ class CoreExport Channel : public Extensible
         * a given user for this channel.
         * @param u The user to match bans against
         * @param type The type of extban to check
-        * @returns 1 = exempt, 0 = no match, -1 = banned
         */
-       int GetExtBanStatus(User *u, char type);
+       ModResult GetExtBanStatus(User *u, char type);
 
        /** Overloaded version to check whether a particular string is extbanned
-        * @returns 1 = exempt, 0 = no match, -1 = banned
         */
-       int GetExtBanStatus(const std::string &str, char type);
+       ModResult GetExtBanStatus(const std::string &str, char type);
 
        /** Clears the cached max bans value
         */
@@ -542,18 +548,4 @@ class CoreExport Channel : public Extensible
        virtual ~Channel() { /* stub */ }
 };
 
-static inline int banmatch_reduce(int v1, int v2)
-{
-       int a1 = abs(v1);
-       int a2 = abs(v2);
-       if (a1 > a2)
-               return v1;
-       else if (a2 > a1)
-               return v2;
-       else if (v1 > v2)
-               return v1;
-       // otherwise v2 > v1 or equal
-       return v2;
-}
-
 #endif