summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-09-04 12:27:04 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-09-04 12:27:04 +0200
commit679411e500fb0c81ad403edb4aae54d3660a098d (patch)
tree919f9be6bbb87079098ae446edfaffb4f7f5dbff
parentdb248e7d99636809a88f0ddb5ccf9a8034cbdf36 (diff)
Let callers customize the begin/end positions for ModeParser::ModeParamsToChangeList()
This helps spanningtree when it deals with a vector of parameters where the modes begin at different positions
-rw-r--r--include/mode.h6
-rw-r--r--src/mode.cpp11
2 files changed, 12 insertions, 5 deletions
diff --git a/include/mode.h b/include/mode.h
index 868f3437d..de92e8ec5 100644
--- a/include/mode.h
+++ b/include/mode.h
@@ -716,8 +716,12 @@ class CoreExport ModeParser : public fakederef<ModeParser>
* @param parameters List of strings describing the mode change to convert to a ChangeList.
* Must be using the same format as the parameters of a MODE command.
* @param changelist ChangeList object to populate.
+ * @param beginindex Index of the first element that is part of the MODE list in the parameters
+ * container. Defaults to 1.
+ * @param endindex Index of the first element that is not part of the MODE list. By default,
+ * the entire container is considered part of the MODE list.
*/
- void ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist);
+ void ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist, unsigned int beginindex = 1, unsigned int endindex = UINT_MAX);
/** Find the mode handler for a given mode name and type.
* @param modename The mode name to search for.
diff --git a/src/mode.cpp b/src/mode.cpp
index d9dba196d..770e6a2e2 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -425,12 +425,15 @@ void ModeParser::Process(const std::vector<std::string>& parameters, User* user,
}
}
-void ModeParser::ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist)
+void ModeParser::ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist, unsigned int beginindex, unsigned int endindex)
{
- const std::string& mode_sequence = parameters[1];
+ if (endindex > parameters.size())
+ endindex = parameters.size();
+
+ const std::string& mode_sequence = parameters[beginindex];
bool adding = true;
- unsigned int param_at = 2;
+ unsigned int param_at = beginindex+1;
for (std::string::const_iterator letter = mode_sequence.begin(); letter != mode_sequence.end(); letter++)
{
@@ -450,7 +453,7 @@ void ModeParser::ModeParamsToChangeList(User* user, ModeType type, const std::ve
}
std::string parameter;
- if (mh->GetNumParams(adding) && param_at < parameters.size())
+ if (mh->GetNumParams(adding) && param_at < endindex)
parameter = parameters[param_at++];
changelist.push(mh, adding, parameter);