mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
modestacker class, stacks modes and returns a string list of up to MAXMODES modes
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5389 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
8b9664a6af
commit
02fe4a3085
@ -123,6 +123,17 @@ namespace irc
|
||||
bool operator()(const insp_inaddr &s1, const insp_inaddr &s2) const;
|
||||
};
|
||||
|
||||
class modestacker
|
||||
{
|
||||
private:
|
||||
std::deque<std::string> sequence;
|
||||
bool adding;
|
||||
public:
|
||||
modestacker(bool add);
|
||||
void Push(char modeletter, const std::string ¶meter);
|
||||
std::deque<std::string> GetStackedLine();
|
||||
};
|
||||
|
||||
/** irc::tokenstream reads a string formatted as per RFC1459 and RFC2812.
|
||||
* It will split the string into 'tokens' each containing one parameter
|
||||
* from the string.
|
||||
|
@ -309,3 +309,31 @@ const char* irc::Spacify(char* n)
|
||||
}
|
||||
|
||||
|
||||
irc::modestacker::modestacker(bool add) : adding(add)
|
||||
{
|
||||
sequence.clear();
|
||||
sequence.push_back("");
|
||||
}
|
||||
|
||||
void irc::modestacker::Push(char modeletter, const std::string ¶meter)
|
||||
{
|
||||
*(sequence.begin()) += modeletter;
|
||||
sequence.push_back(parameter);
|
||||
}
|
||||
|
||||
std::deque<std::string> irc::modestacker::GetStackedLine()
|
||||
{
|
||||
std::deque<std::string> result;
|
||||
result.push_back("");
|
||||
|
||||
while (!sequence[0].empty() && (sequence.size() > 1))
|
||||
{
|
||||
result[0] += *(sequence[0].begin());
|
||||
result.push_back(sequence[1]);
|
||||
sequence[0].erase(sequence[0].begin());
|
||||
sequence.erase(sequence.begin() + 1);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user