blob: 878527026db2aa89c89a0494bf2553cac854d530 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#include <irc/irc_user.hpp>
#include <iostream>
IrcUser::IrcUser(const std::string& name,
const std::map<char, char>& prefix_to_mode)
{
if (name.empty())
return ;
const std::map<char, char>::const_iterator prefix = prefix_to_mode.find(name[0]);
const std::string::size_type name_begin = prefix == prefix_to_mode.end()? 0: 1;
const std::string::size_type sep = name.find("!", name_begin);
if (sep == std::string::npos)
this->nick = name.substr(name_begin);
else
{
this->nick = name.substr(name_begin, sep-name_begin);
this->host = name.substr(sep+1);
}
if (prefix != prefix_to_mode.end())
this->modes.insert(prefix->second);
}
IrcUser::IrcUser(const std::string& name):
IrcUser(name, {})
{
}
void IrcUser::add_mode(const char mode)
{
this->modes.insert(mode);
}
void IrcUser::remove_mode(const char mode)
{
this->modes.erase(mode);
}
char IrcUser::get_most_significant_mode(const std::vector<char>& modes) const
{
for (const char mode: modes)
{
if (this->modes.find(mode) != this->modes.end())
return mode;
}
return 0;
}
|