summaryrefslogtreecommitdiff
path: root/src/irc/irc_channel.cpp
diff options
context:
space:
mode:
authorVasudev Kamath <vasudev@copyninja.info>2016-10-23 21:09:40 +0530
committerVasudev Kamath <vasudev@copyninja.info>2016-10-23 21:09:40 +0530
commiteda4b75b1cff83336e87da90efca9fd6b4ced2c7 (patch)
tree491317ce50b5d19bc434ccc4b448d1bc70520177 /src/irc/irc_channel.cpp
parent716c40e4ec45f8d538695225f4f06d541d959084 (diff)
parent0f14fe83ef53b08bd8fa09670c82f4996c329bdc (diff)
downloadbiboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.tar.gz
biboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.tar.bz2
biboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.tar.xz
biboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.zip
New upstream version 3.0upstream/3.0
Diffstat (limited to 'src/irc/irc_channel.cpp')
-rw-r--r--src/irc/irc_channel.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/irc/irc_channel.cpp b/src/irc/irc_channel.cpp
new file mode 100644
index 0000000..e769245
--- /dev/null
+++ b/src/irc/irc_channel.cpp
@@ -0,0 +1,60 @@
+#include <irc/irc_channel.hpp>
+#include <algorithm>
+
+IrcChannel::IrcChannel():
+ joined(false),
+ self(nullptr)
+{
+}
+
+void IrcChannel::set_self(const std::string& name)
+{
+ this->self = std::make_unique<IrcUser>(name);
+}
+
+IrcUser* IrcChannel::add_user(const std::string& name,
+ const std::map<char, char>& prefix_to_mode)
+{
+ this->users.emplace_back(std::make_unique<IrcUser>(name, prefix_to_mode));
+ return this->users.back().get();
+}
+
+IrcUser* IrcChannel::get_self() const
+{
+ return this->self.get();
+}
+
+IrcUser* IrcChannel::find_user(const std::string& name) const
+{
+ IrcUser user(name);
+ for (const auto& u: this->users)
+ {
+ if (u->nick == user.nick)
+ return u.get();
+ }
+ return nullptr;
+}
+
+void IrcChannel::remove_user(const IrcUser* user)
+{
+ const auto nick = user->nick;
+ const auto it = std::find_if(this->users.begin(), this->users.end(),
+ [nick](const std::unique_ptr<IrcUser>& u)
+ {
+ return nick == u->nick;
+ });
+ if (it != this->users.end())
+ this->users.erase(it);
+}
+
+void IrcChannel::remove_all_users()
+{
+ this->users.clear();
+ this->self.reset();
+}
+
+DummyIrcChannel::DummyIrcChannel():
+ IrcChannel(),
+ joining(false)
+{
+}